在相同的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方法与多个asserttesting多个东西: 默认设置设置上下文variables 。 但是testing一个东西的testing方法也可以有多个assert

一个好的模式是每个testing用例有四个阶段:

  1. 安装程序 :在哪里创build需要执行testing的对象,并在必要时更改这些对象以使其处于所需的初始状态。
  2. 练习 :在哪里执行您正在testing的操作。 这将是一个方法调用,或一个构造函数调用。
  3. validation :在哪里检查被testing的对象是否处于正确的状态,并检查在练习阶段中调用的方法返回的值是否返回值。 这是你放置assert的地方。 如果使用这种模式,在validation阶段放置多个assert没有任何问题。
  4. 拆解 :你破坏或closures你用来执行testing的对象。

这是Gerard Meszaros在“ xUnittesting模式:重构testing代码 ”一书中推荐的方法。

将模式与第一个示例中的模式相比较,其中似乎您会这样做:

  1. 初始设置
  2. 锻炼构造函数
  3. validation默认值
  4. 练习设置一个上下文variables
  5. validation上下文variables的设置
  6. 拆除

Eclipse为每个方法生成unit testing,这似乎是一个合理的方法。 如果testing的方法太复杂,无法使用一种testing方法进行testing,那么您可以考虑重新考虑它。

但更好的方法是使用TDD,并预先编写testing,这将推动其余的devise和实现。

就个人而言,我更喜欢每种方法都有一个testing,以及适用于Eclipse的Java代码覆盖http://www.eclemma.org

该工具会告诉你你正在testing什么。