Question

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?

Était-ce utile?

La solution

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top