当我们有像
这样的课程时class IntoController(IViewModelCreator viewModelCreator) {}
和
class ProductController(ICommandFactory commandFactory, IViewModelCreator viewModelCreator) {}
和
class ProductController(ICommandFactory commandFactory, IViewModelCreator viewModelCreator, IRepository repository) {}
还有很多。每次都需要花费大量时间来模拟这些接口。您如何看待包含大量模拟的通用类?
class BaseControllerUnitTests
{
protected Mock<IViewModelCreator> ViewModelCreator { get;set; }
protected Mock<ICommandFactory> ViewModelCreator { get;set; }
protected Mock<IRepository> ViewModelCreator { get;set; }
}
提前致谢。
答案 0 :(得分:4)
我实际上是这样做的;我只是将它们保存在一个名为TestDataFactory
的不同类中,这样我就不会遇到继承问题(以防万一我必须在测试中扩展其他一些基类)。
工厂不应该是全球性/静态的(见下文)。
临:
ProductController
以及稍后,当您要求ICommandFactory
时,您会得到一个注入控制器)。缺点:
答案 1 :(得分:1)
除了Aaron Digulla的回答之外,我还想建议我的colleague's post一些例子。他称之为测试背景。我也使用这种方法。
答案 2 :(得分:0)
您编写测试代码这一事实并不意味着所有软件工程最佳实践都应该消失。 如果你的测试之间有一个共同功能的子集(在这种情况下 - 模拟测试类的一些方法)那么是的,无论如何 - 你可以提取一个基类。