【发布时间】:2011-09-02 13:27:59
【问题描述】:
我有一个类,我想在其公共方法之一中实现单元测试,以测试是否调用了特定方法。
为简化起见,让我们拿下面的类和单元测试。
我应该更改或实现什么(如接口等),以便我可以断言“MakeNoise 方法调用 Bark 方法”
如果需要,我可以使用 RhinoMocks。
public class Animal
{
public string AnimalType {get; set;}
public string Bark()
{
if(AnimalType=="dog")
{
return "Hof! Hof! Hof!";
}
return string.Empty;
}
public string MakeNoise()
{
if(AnimalType=="dog")
{
return Bark();
}
return
string.Empty;
}
}
[TestMethod]
public void MakeNoise_WithAnimalTypeDog_CallsBarkMethod()
{
var dog = new Animal(){AnimalType="dog"};
dog.MakeNoise();
// How can I test if the MakeNoise method called BarkMethod ?
}
【问题讨论】:
-
pencilCake,在你的 Bark() 中你总是返回 string.Empty 本身,那么你如何测试一个有效的呢?
-
这段代码是半真实的吗?典型示例通常是从
Animal继承并覆盖MakeNoise方法的Dog。这完全颠覆了你的问题。然后你对Dog进行单元测试以确保它具有正确的行为。 -
我们先说说为什么你的
Animal类有Bark方法。 -
重要的是行为,而不是调用了某个方法。
标签: c# .net unit-testing rhino-mocks