相关疑难解决方法(0)

JUnit混淆:使用'extends TestCase'还是'@Test'?

我发现JUnit的正确使用(或至少是文档)非常令人困惑.这个问题既可作为未来参考,也可作为真正的问题.

如果我理解正确,有两种主要的方法来创建和运行JUnit测试:

方法A(JUnit 3-style):创建一个扩展TestCase的类,并用该单词启动测试方法test.当作为JUnit Test(在Eclipse中)运行该类时,test将自动运行以该单词开头的所有方法.

import junit.framework.TestCase;

public class DummyTestA extends TestCase {

    public void testSum() {
        int a = 5;
        int b = 10;
        int result = a + b;
        assertEquals(15, result);
    }
}
Run Code Online (Sandbox Code Playgroud)

方法B(JUnit 4-style):创建一个"普通"类并@Test在方法前加一个注释.请注意,您不必使用单词启动方法test.

import org.junit.*;
import static org.junit.Assert.*;

public class DummyTestB {

    @Test
    public void Sum() {
        int a = 5;
        int b = 10;
        int result = a + b;
        assertEquals(15, result);
    }
}
Run Code Online (Sandbox Code Playgroud)

混合两者似乎不是一个好主意,请参阅例如 …

java junit automated-tests

149
推荐指数
4
解决办法
7万
查看次数

断言与编写单元测试

我读了这个关于何时使用断言的答案,基本上是说使用它来进行在生产中关闭的测试:适当使用断言

(Oracle 文档说As an added benefit, assertions serve to document the inner workings of your program, enhancing maintainability.这是有道理的,但我不清楚为什么它是额外的好处而不是唯一的好处。)

我的想法是:

  • 如果您想在开发过程中检查某些事情“永远不会发生”但在生产中关闭该检查,似乎它可以作为测试边缘情况的单元测试的一部分进行覆盖。
  • 我可以看到在经过大量手动测试的开发环境上进行断言的一些好处,因此您会获得一些好处,即以某种可能性出现边缘情况并且断言捕获它。但是,由于依赖于此而不是单元测试意味着您不能保证测试该边缘情况,因此您也不能保证它在生产中“永远不会发生”。因此,我更喜欢使用 try/if 以防它在生产过程中出现。
  • 因此,剩下的用例集似乎非常狭窄 - 当您无法编写有效的测试时断言,但非常有信心它不会在生产中出现,并且您非常关心这部分的性能你的代码。

我有什么误解?预先感谢您的帮助 :)

java assert

5
推荐指数
0
解决办法
1031
查看次数

标签 统计

java ×2

assert ×1

automated-tests ×1

junit ×1