我有一个MVC项目,其中一个控制器派生自以下结构中的两个基类:
Global Base Controller
|
|--------------------|
Type1 Type2
| |
|--------------------------------------|
Controller1/Controller2 Controller3/Controller4
我想设置我的单元测试,以便我只测试controller1 / 2/3/4中的任何重写方法,以便我坚持使用DRY主体。这意味着如果我将测试添加到Global Base Controller
中,它们将在链中进一步应用。
使用NUnit / msTest实现此目的的最佳方法是什么?
我尝试按照以下示例对测试执行相同的结构,但是没有选择基本测试:
public class ControllerTestClass<T>
{
public class ForThisMethod
{
[Test]
public void WhenThisCondition_HasThisValue()
{
Assert.IsAssignableFrom<T>("");
}
}
}
public class UnitTest2 : ControllerTestClass<String>
{
[TestFixture]
public class ForThisMethod2
{
[Test]
public void WhenThisCondition_HasThisValue()
{
Assert.True(true);
}
}
}
使用上述结构,我在Test Explorer中看到以下内容:
注意:我知道以这种方式进行测试需要新功能的开发人员添加其他测试。这很好,将写入项目说明。
答案 0 :(得分:0)
我认为您需要以与实施代码相同的方式来考虑您的测试,而不是“正式”方式。您正试图使测试代码过度复杂化。危险在于您可能会花费相同的时间和精力来管理测试代码作为实现代码。
我所做的是使用继承来实现常用功能,这样我就可以减少编写相同的代码(我相信你试图在这里尝试相同)但我知道我必须重复一些测试代码,这很好因为它意味着我不必管理它们。
一般来说,如果你必须编写太多相同的测试方法,那么你就是概率。需要重新考虑您的实施设计和概率。需要使用IoC / DI或类似技术引入代码分离。这样,您的通用代码将只有有限数量的测试,并且所有其他特定于不同功能的代码将在isolcation中进行测试。 (希望这有道理:))