使用JUnit 3.8对计算器进行单元测试

需积分: 10 6 下载量 18 浏览量 更新于2024-07-30 1 收藏 181KB DOC 举报
"JUnit的使用.doc" JUnit 是一个广泛使用的 Java 编程语言的单元测试框架。它使得开发者能够轻松地创建和运行针对他们代码的测试用例,确保代码的正确性和稳定性。在提供的文档中,我们可以看到一个简单的 `Calculator` 类的实现,包含了四个基本的数学运算方法:加法、减法、乘法和除法。同时,文档还展示了如何为这个 `Calculator` 类编写 JUnit 测试用例。 在 JUnit 3.8 版本中,测试类需要遵循以下规则: 1. **测试类**:测试类必须继承自 `junit.framework.TestCase` 类。在这个例子中,我们有 `CalculatorTest` 类,它继承了 `TestCase`。 2. **测试方法**:测试方法必须是公共(public)、无返回值(void)、无参数,并且其名称以 "test" 开头。例如,`testAdd` 方法用于测试 `Calculator` 类的 `add` 方法。 3. **初始化和清理**:在每个测试用例开始前,可以覆盖 `setUp` 方法进行初始化工作。在这个例子中,`setUp` 方法设置了变量 `a` 和 `b` 的值,并创建了一个 `Calculator` 对象。相反,`tearDown` 方法用于在每个测试用例结束后执行清理操作,虽然在这个例子中没有实际的清理操作。 4. **断言**:测试通过使用断言(Assert)来验证预期结果。`Assert` 类提供了诸如 `assertEquals`、`assertTrue` 等方法,用来比较实际结果与期望结果是否一致。在 `CalculatorTest` 类中,`testAdd` 方法中应该会包含 `assertEquals` 来验证 `add` 方法的计算结果。 5. **异常处理**:如果某个方法预期会抛出异常,测试方法可以捕获并验证这个异常。例如,在 `Calculator` 类的 `divide` 方法中,当除数为零时会抛出 `Exception`,因此对应的测试方法 `testDivide` 应该验证此异常是否按照预期发生。 JUnit 的核心理念是通过测试驱动开发(TDD),即先编写测试用例,然后编写代码以使测试通过。这有助于保证代码质量,及时发现和修复问题,并且有利于后期的维护和扩展。在实际项目中,开发者通常会使用注解(Annotations)如 `@Test`(在 JUnit 4 及更高版本中)来标记测试方法,而不是像 JUnit 3.8 那样强制要求方法名称以 "test" 开头。 总结来说,`Calculator` 类的单元测试展示了 JUnit 如何用于验证代码功能的正确性,而 `CalculatorTest` 类则提供了一个基本的测试结构示例,包括测试类的构建、测试方法的定义以及断言的使用。对于任何 Java 开发者来说,理解和掌握 JUnit 的使用都是非常重要的技能。

org.junit.ComparisonFailure: expected:<456[]> but was:<456[ ]> at org.junit.Assert.assertEquals(Assert.java:115) at org.junit.Assert.assertEquals(Assert.java:144) at Dao.BookDaoTest.testAddBook(BookDaoTest.java:60) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) at org.junit.runners.ParentRunner.run(ParentRunner.java:363) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:89) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:41) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:541) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:763) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:463) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:209)

2023-06-12 上传

java.lang.NullPointerException at com.chengqq.ApplicationTest.set(ApplicationTest.java:23) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) at org.junit.runners.ParentRunner.run(ParentRunner.java:363) at org.junit.runner.JUnitCore.run(JUnitCore.java:137) at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68) at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33) at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:230) at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:58)

2023-05-22 上传

java.lang.ExceptionInInitializerError at UserMapperTset.testupdateById(UserMapperTset.java:31) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) at org.junit.runners.ParentRunner.run(ParentRunner.java:363) at org.junit.runner.JUnitCore.run(JUnitCore.java:137) at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68) at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33) at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:230) at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:58) Caused by: org.apache.ibatis.exceptions.PersistenceException:

2023-07-11 上传