this is how a test looks like in my application:

    @Test (expected = UniqueFieldValueConstraintViolationException.class)
    public void testName() {
       Branch b1 = new Branch("tetsname","Test 234","06:00-17:00","098144658");
       Branch b2 = new Branch("tetsname","Test 234","06:00-17:00","098144658");
       db.store(b1);
       db.store(b2);
       db.commit();
     }

This test fails although the exception is thrown:

com.db4o.constraints.UniqueFieldValueConstraintViolationException: class: dataModel.Branch field: pNumber     at

com.db4o.constraints.UniqueFieldValueConstraint$1.ensureSingleOccurence(UniqueFieldValueConstraint.java:66) at com.db4o.constraints.UniqueFieldValueConstraint$1.onEvent(UniqueFieldValueConstraint.java:97) at com.db4o.internal.events.Event4Impl.trigger(Event4Impl.java:78) at com.db4o.internal.events.EventRegistryImpl$4.run(EventRegistryImpl.java:123) at com.db4o.foundation.DynamicVariable.with(DynamicVariable.java:54) at com.db4o.internal.InCallback.run(InCallback.java:24) at com.db4o.internal.events.EventRegistryImpl.withExceptionHandlingInCallback(EventRegistryImpl.java:279) at com.db4o.internal.events.EventRegistryImpl.commitOnStarted(EventRegistryImpl.java:121) at com.db4o.internal.LocalTransaction.dispatchCommittingCallback(LocalTransaction.java:89) at com.db4o.internal.LocalTransaction.commit(LocalTransaction.java:66) at com.db4o.internal.LocalTransaction.commit(LocalTransaction.java:59) at com.db4o.internal.LocalObjectContainer.commitTransaction(LocalObjectContainer.java:689) at com.db4o.internal.LocalObjectContainer.close2(LocalObjectContainer.java:94) at com.db4o.internal.ObjectContainerBase.close1(ObjectContainerBase.java:361) at com.db4o.internal.ObjectContainerBase.close(ObjectContainerBase.java:344) at tests.BranchTests.cleanUp(BranchTests.java:127) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44) at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:33) at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229) at org.junit.runners.ParentRunner.run(ParentRunner.java:309) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

How can i avoid this behavior?

有帮助吗?

解决方案

From the stack trace, you can see this exception isn't being thrown in the testName() method: it's being thrown by tests.BranchTests.cleanUp, which is presumably a separate method run before or after your real test.

JUnit's expected won't cover exceptions thrown during these phases. Either ensure these failures don't happen here, or catch and ignore them.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top