3

我似乎遇到了问题,我有一个在构造函数中接受 IUser 的类 (LoginService)。这是用于执行集成测试而不是单元测试,因此我不想模拟这些,我已经有一些单元测试并且它们在使用 Moq 和夹具时工作得很好。

我设置了我的夹具:-

  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 并将其注入到夹具中吗?

期待任何帮助或信息

4

2 回答 2

4

是的,这是正确的——如果你想提供一个特定的实例,IUserLoginService必须注入它。

请记住,这Inject将影响所有后续请求(如果有)IUser

于 2013-07-02T09:55:17.513 回答
3

Nikos Baxevanis 的回答是正确的,但是有很多方法可以剥去那只猫的皮。

如果您每次都想要一个实例而不是同一个用户实例,那么您还可以映射UserIUser

fixture.Customizations.Add(
    new TypeRelay(
        typeof(IUser),
        typeof(User)));
于 2013-07-02T15:14:37.477 回答