AutoFixture:无法创建实例,可能没有公共构造函数

时间:2013-07-02 09:16:47

标签: c# autofixture

我似乎遇到了问题,我有一个类(LoginService)在构造函数中接受一个I​​User。这是为了执行集成测试而不是单元测试,因此我不想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并将其注入灯具吗?

期待任何帮助或信息

2 个答案:

答案 0 :(得分:4)

是的,这是正确的 - 如果你想向IUser提供LoginService的特定实例,你必须注入它。

请注意,Inject会影响IUser的所有后续请求(如果有)。

答案 1 :(得分:3)

Nikos Baxevanis的答案是正确的,但有很多方法可以给那只猫皮肤。

如果您每次都想要一个实例,而不是同一个用户实例,那么您也可以将User映射到IUser

fixture.Customizations.Add(
    new TypeRelay(
        typeof(IUser),
        typeof(User)));