2014-03-30 201 views
0

这是一个测试看起来像在我的应用程序:JUnit测试失败

@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(); 
    } 

此测试失败虽然抛出异常:

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) 在com.db4o.internal.events.Event4Impl.trigger(Event4Impl.java:78) 在 com.db4o.internal.events.EventRegistryImpl $ 4.run(EventRegistryImpl.java:123) 在com.db4o.foundation。 DynamicVariable.with在 com.db4o.internal.events.EventRegistryImpl.withExceptionHandlingInCallback(EventRegistryImpl.java:279)在(DynamicVariable.java:54) 在com.db4o.internal.InCallback.run(InCallback.java:24) com.db4o.internal.events.EventRegistryImpl.commitOnStarted(EventRegistryImpl.java:121) 在 com.db4o.internal.LocalTransaction.dispatchCommittingCallback(LocalTransaction.java:89) 在 com.db4o.internal.LocalTransaction.commit (LocalTran saction.java:66) 在 com.db4o.internal.LocalTransaction.commit(LocalTransaction.java:59) 在 com.db4o.internal.LocalObjectContainer.commitTransaction(LocalObjectContainer.java:689) 在 com.db4o .internal.LocalObjectContainer.close2(LocalObjectContainer.java:94) 在 com.db4o.internal.ObjectContainerBase.close1(ObjectContainerBase.java:361) 在 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(Unkn (Unknown Source)at org.junit.runners.model.FrameworkMethod $ 1.runReflectiveCall(FrameworkMethod.java: 47) 在 org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 在 org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44) 在 有机.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:33) 在org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)在 org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner .java:70) 在 org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) 在org.junit.runners.ParentRunner $ 3.run(ParentRunner.java:238)在 org.junit.runners.ParentRunner $ 1.schedule (ParentRunner.java:63) org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)at org.junit.runners.ParentRunner.access $ 000(ParentRunner.java:53)at org.junit。 runner.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) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner。的java:683) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner。 java:197)

我该如何避免这种行为?

回答

0

从堆栈跟踪中,您可以看到这个异常不会在testName()方法中抛出:它被tests.BranchTests.cleanUp抛出,这大概是在真正的测试之前或之后运行的单独方法。

JUnit的expected不会涵盖这些阶段抛出的异常。要么确保这些故障不会发生在这里,要么忽略它们。

+0

thx,这个异常是在他的cleanup()方法中创建的,就像你提到的那样。 Eclipse将testname()方法标记为失败,并且我从不检查堆栈跟踪中的详细信息。 – syc