在相同的testing用例或单独的testing用例中testing默认值和设置器
你会推荐在@Test方法中做任何testing用例分组,或者每个testingscheme有一个@Test方法? 例如,让我们假设在应用程序中设置上下文有不同的方法。
下面的想法可以接受吗?
@Test public void testContextSetting() { // Test default setting assert(...) // Test setting a context variable assert(...) ... }
或者,你宁愿build议像这样做,让每种方法尽可能primefaces化:
@Test public void textDefaultSetting() { // Test default setting assert(...) } @Test public void testSettingContextVar() { // Test setting a context variable assert(...) ... }
对于任何反馈,我们都表示感谢。
我更喜欢每个方法都有一个testing用例。
首先,更容易看到哪些案例正在被testing,如果它们被分解成方法,而不是寻找代码中embedded的注释。 大多数IDE会给你方法的总结,所以不是说“我testing了edgecase XYZ吗?” 然后寻找注释,或者查找设置该边界的代码,只需查找名为setupContextEdgeCaseXYZ()
的方法即可。
第二个原因是,如果你有多个案例在一起可能会失败,然后其他人不会执行。
testDefaultCase() testInvalidInput() testEdgeCase1() testEdgeCase2()
有了这个结构,就可以更容易地确定input检查是不好的,而边界情况2处理不当,但其他的都可以(你可能会发现两个失败的案例是相关的,问题被诊断得更快)。
第三个原因是你可能会不小心留下一个以前的testing集的值,以不显眼的方式使后面的testing失效。 一个简单的例子:
@Test public void testMyMethod() { //test default String test = Foo.bar(null); assertEquals("foo", test); //test case 1 Foo.bar(aValue); //Oops forgot to set value above, this passes regardless of //what the above call does assertEquals("foo", test); }
通过分开的情况,你可以避免上面的错误,因为这会变成编译错误或警告。
最佳实践是每个方法都有一个testing用例。 方法名称描述您正在执行的testing。 当你的testing失败时,debugging更容易,因为它只是一个断言。
Divide et impera :)如此分裂在多个小案例…更容易解决在错误的情况下。
你用一个断言混淆了一个testing 。 你的testing方法与多个assert
testing多个东西: 默认设置和设置上下文variables 。 但是testing一个东西的testing方法也可以有多个assert
。
一个好的模式是每个testing用例有四个阶段:
- 安装程序 :在哪里创build需要执行testing的对象,并在必要时更改这些对象以使其处于所需的初始状态。
- 练习 :在哪里执行您正在testing的操作。 这将是一个方法调用,或一个构造函数调用。
- validation :在哪里检查被testing的对象是否处于正确的状态,并检查在练习阶段中调用的方法返回的值是否返回值。 这是你放置
assert
的地方。 如果使用这种模式,在validation阶段放置多个assert
没有任何问题。 - 拆解 :你破坏或closures你用来执行testing的对象。
这是Gerard Meszaros在“ xUnittesting模式:重构testing代码 ”一书中推荐的方法。
将模式与第一个示例中的模式相比较,其中似乎您会这样做:
- 初始设置
- 锻炼构造函数
- validation默认值
- 练习设置一个上下文variables
- validation上下文variables的设置
- 拆除
Eclipse为每个方法生成unit testing,这似乎是一个合理的方法。 如果testing的方法太复杂,无法使用一种testing方法进行testing,那么您可以考虑重新考虑它。
但更好的方法是使用TDD,并预先编写testing,这将推动其余的devise和实现。
就个人而言,我更喜欢每种方法都有一个testing,以及适用于Eclipse的Java代码覆盖http://www.eclemma.org 。
该工具会告诉你你正在testing什么。