单元测试接口和方法调用

时间:2010-06-28 21:10:49

标签: c# unit-testing interface

我不清楚有两种测试方案。两者都乍一看是为了制造非常脆弱的测试。

首先,一个单元应该何时测试接口(即验证接口是否具有设置的签名)?

第二,何时应该“测试序列图”(我刚刚编写的一个术语) - 意味着正在对相应的对象进行验证调用?

1 个答案:

答案 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()等方法。