我在我的測試慣例中使用了AutoMoqCustomization。處理AutoFixture和Moq之間的樣本創建不一致問題
考慮下面的代碼。一切工作都很好,直到我將一個構造函數添加到其中一個具體類。當我這樣做時,我得到「找不到無參數的構造函數」。我們知道AutoFixture對構造函數沒有問題,因爲它向我提供了測試對象one
,它證明可以從IThings分配......沒有失敗。所以它一定是moq。
這是有道理的,因爲我認爲builder
是由moq生成並傳入GetCommands
方法。所以我想我可以看到控制已經從AutoFixture傳遞到moq。
這需要照顧的原因,但我該怎麼辦呢?有沒有辦法指導moq如何處理ThingOne
,或者有沒有辦法指示AutoFixture忽略IThingBuilders
的moq,而是做一些Fixtury?
public class TestClass
{
public interface IThingBuilders
{
T1 Build<T1>() where T1 : IThings;
}
public interface IThings
{
}
public class ThingOne : IThings
{
public ThingOne(string someparam)
{
}
}
public class ThingTwo : IThings
{
}
public class SomeClass
{
public List<IThings> GetCommands(IThingBuilders builder)
{
var newlist = new List<IThings>();
newlist.Add(builder.Build<ThingOne>());
newlist.Add(builder.Build<ThingTwo>());
return newlist;
}
}
[Theory, BasicConventions]
public void WhyCannotInstantiateProxyOfClass(ThingOne one, ThingTwo two, IThingBuilders builder, SomeClass sut)
{
Assert.IsAssignableFrom<IThings>(one);
Assert.IsAssignableFrom<IThings>(two);
var actual = sut.GetCommands(builder);
Assert.Equal(1, actual.OfType<ThingOne>().Count());
Assert.Equal(1, actual.OfType<ThingTwo>().Count());
}
}
This [answer](https://github.com/AutoFixture/AutoFixture/issues/159#issuecomment-23314376)可能會有所幫助。 –