我一直在看Nerd Dinner应用程序,更具体地说是它如何处理其单元测试。
RSVPController的以下构造函数让我稍微混淆
public RSVPController()
: this(new DinnerRepository()) {
}
public RSVPController(IDinnerRepository repository) {
dinnerRepository = repository;
}
据我所知,单元测试使用了第二个,因此它可以使用Fake存储库。我无法解决的是第一个构造函数的作用。它似乎没有设置dinnerRepository变量,它似乎暗示它继承了某些东西,但我真的没有得到它。
任何人都可以解释一下吗?
由于
答案 0 :(得分:3)
第一个构造函数将“默认”IDinnerRepository
实现(即DinnerRepository
)传递给第二个构造函数。
这样做是因为MVC Controller Factory使用了空构造函数。换句话说,当应用程序实际执行时,它使用具有默认存储库实现的第一个构造函数。当单元测试想要测试Controller时,可以将模拟的IDinnerRepository
传递给控制器。
答案 1 :(得分:0)
第一个构造函数使用新的DinnerRepository调用第二个构造函数。多数民众赞成在做什么:
: this(new DinnerRepository())
它调用第二个构造函数并将DinnerRepository变量与DinnerRepository的新实例一起分配。