質問

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