我似乎遇到了问题,我有一个类(LoginService)在构造函数中接受一个IUser。这是为了执行集成测试而不是单元测试,因此我不想MOCK这些,我已经进行了一些单元测试,并且他们使用Moq和fixture进行了很好的工作。
我设置了我的夹具: -
var fixture = new Fixture();
然后我希望能够冻结IUser的一个版本,我已经尝试了以下但我无法让它工作,它抱怨它无法创建实例,可能是由于没有构造函数
var user = fixture.Freeze<IUser>();
所以我设法让它按照以下方式工作
IUser user = new User(); // Create my IUser manually
fixture.Inject(user);
然后最终创建sut并且确实注入了实例。
var sut = fixture.Create<LoginService>();
我这样做是对的吗?我可以不使用Freeze,我应该继续手动创建我的IUser并将其注入灯具吗?
期待任何帮助或信息
答案 0 :(得分:4)
是的,这是正确的 - 如果你想向IUser
提供LoginService
的特定实例,你必须注入它。
请注意,Inject
会影响IUser
的所有后续请求(如果有)。
答案 1 :(得分:3)
Nikos Baxevanis的答案是正确的,但有很多方法可以给那只猫皮肤。
如果您每次都想要一个新实例,而不是同一个用户实例,那么您也可以将User
映射到IUser
:
fixture.Customizations.Add(
new TypeRelay(
typeof(IUser),
typeof(User)));