【发布时间】:2011-05-08 04:19:27
【问题描述】:
我刚刚开始使用 Visual Studio 2010 进行单元测试。我想知道是否有一个工作流可以让我创建一系列应用于接口的测试,然后将这些接口测试应用于任何和所有实现接口的类。
比如说我有如下界面。
public interface IAnimal
{
public string Name {get;}
public string Speak();
}
我显然可以有许多实现这个接口的类。
public class Dog:IAnimal
{
public string Name {get{return "Dog";}}
public string Speak{return "BARK BARK";}
public bool LickBalls();
}
public class Cat:IAnimal
{
public string Name {get{return "Cat";}}
public string Speak{return "MEOW MEOW";}
public bool Scratch();
}
所以我想定义一系列适用于所有IAnimals的测试
public TestAnimalName(IAnimal animal)
{
Assert.IsFalse(string.IsNullorEmpty(animal.Name));
}
public TestAnimalSpeak(IAnimal animal)
{
string sound = animal.Speak();
Assert.IsFalse(string.IsNullOrEmpty(sound));
}
然后我想定义一个主TestAnimal() 方法,可以用来测试任何IAnimal。
TestAnimal(IAnimal animal)
{
TestAnimalName(animal);
TestAnimalSpeak(animal);
}
然后我可以在测试IAnimal 的具体类型时调用这个TestAnimal() 方法。
[TestMethod]
TestCat()
{
Cat c = new Cat();
TestAnimal(c);
}
[TestMethod]
TestDog()
{
Dog c = new Dog();
TestAnimal(c);
}
然而,当我尝试在 Visual Studio 中执行此操作时,被调用方法中的 Asserts 会被忽略。我尝试用下面的方法简化问题,发现即使它调用了一个应该导致失败的方法,它也通过了。
[TestMethod]
public void AssertInCalledMethod() //this will pass
{
Assert.IsTrue(true);
Blah();
}
public void Blah()
{
Assert.IsTrue(false);
}
那么如何避免为所有实现相同接口的类编写大量重复测试呢?
【问题讨论】:
-
哇,这是来自 VS 单元测试的破坏行为。如果您使用 NUnit,它将按您的预期工作。
-
我想说你的问题不是编写测试,这些对我来说似乎是合理的方法。问题在于 VS 单元测试中的破坏行为。
-
虽然我不知道答案,但“LickBalls”方法让我大笑。
-
所以 那 就是为什么 Microsoft 软件以有一点漏洞着称。他们的单元测试都通过了,所以可以发货了,对吧?
-
我对具体问题没有疑问,但我注意到我一直使用这种通用技术与 VS 单元测试和被调用方法中的断言通常工作正常。您的问题与构建问题或您未显示的问题有关。
标签: c# .net unit-testing visual-studio-2010