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

C# AutoFixture:无法创建实例,可能没有公共构造函数,c#,autofixture,C#,Autofixture,我似乎有一个问题,我有一个类(LoginService),它在构造函数中接受一个IUser。这是为了执行集成测试而不是单元测试,出于这个原因,我不想模拟这些测试,我已经有了一些单元测试,它们使用Moq和fixture非常有效 我设置了我的设备:- var fixture = new Fixture(); 然后我希望能够冻结IUser的一个版本,我尝试了以下方法,但无法使其工作,它抱怨无法创建实例,可能是因为没有构造函数 var user = fixture.Freeze<IUse

我似乎有一个问题,我有一个类(LoginService),它在构造函数中接受一个IUser。这是为了执行集成测试而不是单元测试,出于这个原因,我不想模拟这些测试,我已经有了一些单元测试,它们使用Moq和fixture非常有效

我设置了我的设备:-

  var fixture = new Fixture();
然后我希望能够冻结IUser的一个版本,我尝试了以下方法,但无法使其工作,它抱怨无法创建实例,可能是因为没有构造函数

  var user = fixture.Freeze<IUser>();
然后最终创建sut,并确保注入实例

  var sut = fixture.Create<LoginService>();
var sut=fixture.Create();
我这样做对吗?我是否可以不使用冻结,继续手动创建IUser并将其注入夹具


期待任何帮助或信息

是的,这是正确的–如果您想向
登录服务
提供
IUser
的特定实例,您必须将其插入


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

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

如果每次都需要一个新实例,而不是相同的用户实例,则还可以将
user
映射到
IUser

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

当然,我可以把autofixture从等式中去掉,但我认为即使在不进行模拟的情况下,它也会派上用场,例如,我可以使用var user=new user();var sut=新登录服务(用户);啊,好的,那就是说我总是会得到那个实例?那么这是正确的做法吗?谢谢你的确认
fixture.Customizations.Add(
    new TypeRelay(
        typeof(IUser),
        typeof(User)));