2008-09-21 37 views

回答

27

一个测试,每个实例:

@Test 
public void userCannotVoteDownWhenScoreIsLessThanOneHundred() { 
... 
} 

都只有一个断言和使用好名字测试失败时给了我一个更好的报告。他们向我尖叫:“你打破了这个规则!”。

+0

这基本上是BDD,简而言之 - 虽然BDD把重点放在写这些规则作为描述性断言。 – 2008-09-21 07:19:53

2

每个检查的测试用例。它更细化。它使得查看特定测试用例失败的情况变得更加容易。

4

BDD(行为驱动开发)

虽然我还在学习,它基本上TDD组织/重点围绕如何你的软件实际使用...这将不是如何开发/内置。

Wikipedia General Info

每个测试方法我会建议您尝试左右逢源BTW至于是否做多的断言。有时你会看到一种策略将你留在一个绑定中,并且开始有意义为什么你通常使用每个方法只使用一个断言。

1

我会建议每个检查的测试用例。 你保持原子越多,结果就越好!

在单个测试中保留多个检查将帮助您生成需要更正多少功能的报告。

保持原子测试案例会告诉你整体质量!

0

每个检查一个测试用例。如果您适当地命名该方法,则可以在这些测试之一导致回归失败时为问题提供有价值的提示。

4

我有一个测试能力功能提供。然而,每个测试可能有几个断言。 测试用例的名称表示正在测试的功能。

一般来说,对于一个功能,我有几个“晴天”测试和一个或几个“下雨天”的情况,这取决于它的复杂性。

2

我为每个方法编写至少一个测试,并且如果方法需要一些不同的setUp来测试好的情况和不好的情况,那么这个时间就会多一些。

但你应该从不在一个单元测试中测试多个方法。它会减少工作量和错误修复您的测试,以防API更改。每张支票和超级描述性的名称

1

在每张支票一般一个测试用例。当测试按特定函数分组时,它会使重构(例如移除或分割)功能变得更加困难,因为测试还需要进行大量更改。针对你想要从课堂中学到的每种行为类型编写测试要好得多。有时候在测试特定的行为时,每个测试用例都有多个检查是有意义的。然而,随着考试变得越来越复杂,班级中的某些内容发生变化时,这些考试变得更加困难。

1

在Java/Eclipse/JUnit中,我在同一棵树上使用了两个源目录(src和test)。 如果我有一个的src/COM/myCompany的/不管/ TestMePlease与价值的测试方法(例如deleteAll(名单<?>东西)抛出MyException)我创建了一个测试/ COM/myCompany的/不管/ TestMePleaseTest与方法来测试不同的使用情况/场景:

@Test 
public void deleteAllWithNullInput() { ... } 

@Test(expect="MyException.class") // not sure about actual syntax here :-P 
public void deleteAllWithEmptyInput() { ... } 

@Test 
public void deleteAllWithSingleLineInput() { ... } 

@Test 
public void deleteAllWithMultipleLinesInput() { ... } 

有不同的检查更容易处理我。尽管如此,因为每个测试都应该是一致的,如果我希望我的初始数据集保持不变,例如,我有时会创建东西并在相同的检查中将其删除,以确保其他每个测试都能找到原始数据集:

@Test 
public void insertAndDelete() { 
    assertTrue(/*stuff does not exist yet*/); 
    createStuff(); 
    assertTrue(/*stuff does exist now*/); 
    deleteStuff(); 
    assertTrue(/*stuff does not exist anymore*/); 
} 

不知道是否有更聪明的方式来做到这一点,告诉你真相......

1

我喜欢每张支票测试的方法,并有meaningfull名测试方法。例如:

testAddUser_shouldThrowIllegalArgumentExceptionWhenUserIsNull

2

我认为单断言的规则是有点过于严格。在我的单元测试中,我尝试遵循单个断言规则 - 您可以在一个测试方法中使用多个断言,只要您一个接一个地执行检查(您不会更改状态在断言之间被测试的类)。

因此,在Python,我相信这样的测试是正确

def testGetCountReturnsCountAndEnd(self): 
    count, endReached = self.handler.getCount() 
    self.assertEqual(count, 0) 
    self.assertTrue(endReached) 

,但这个应该是分裂成两种测试方法:

def testGetCountReturnsOneAfterPut(self): 
    self.assertEqual(self.handler.getCount(), 0) 
    self.handler.put('foo') 
    self.assertEqual(self.handler.getCount(), 1) 

当然,在长时间使用的断言组中,我喜欢创建自定义断言方法 - 这些对比较复杂对象特别有用。

相关问题