我不清楚有两种测试方案。两者都乍一看是为了制造非常脆弱的测试。
首先,一个单元应该何时测试接口(即验证接口是否具有设置的签名)?
第二,何时应该“测试序列图”(我刚刚编写的一个术语) - 意味着正在对相应的对象进行验证调用?
答案 0 :(得分:2)
测试接口意味着您应该只测试公共接口上可用的成员。换句话说,不要测试私人东西。将被测单元作为黑盒。这使得测试更易于维护,因为您可以在不破坏测试的情况下更改实现细节。测试还将表明您的被测单元有用,而不是如何实现。
对其他对象进行的测试调用称为“交互测试”(不要与集成测试混淆,不要模拟其他对象)。当您的受测单元在另一个对象上调用方法而不依赖它时,需要进行交互测试。我试着用一个例子来解释它。
需要测试以下方法:
public decimal CalculateTax(Order order);
让我们假设这个方法需要调用
TaxRules TaxRuleProvider.GetRules(Country country)
返回一些本地规则。当它没有调用它时,它将无法返回正确的结果。它将错过重要信息。您不需要测试它是否已被调用,只需测试结果。
另一种方法:
public void StoreThingy(Thingy toBeStored);
它将调用
public void NotificationBroker.NotifyChanges(SomeChanges x);
StoreThingy不依赖于通知。如果是否发送通知,您无法决定其界面。您需要通过交互测试来测试它。
通常,交互测试的方法返回void
。在此类别中包含各种事件和通知以及Commit()
等方法。