强制中继到mocking框架
本文关键字:mocking 框架 | 更新日期: 2024-10-18 18:57:26
我想创建一个自定义项,将AutoFixture配置为将它确实有实现的类型传递给Moq。我怎样才能一般地做到这一点?
要澄清,请考虑:
public class test
{
public string foo;
public test(IDictionary<string, string> stuffing)
{
foo = stuffing["bogus"];
}
}
[TestMethod]
public void testInjection()
{
var fixture = new Fixture();
bool didThrow;
try
{
var sut = fixture.Create<test>();
didThrow = false;
}
catch
{
didThrow = true;
}
Assert.IsTrue(didThrow);
}
测试通过。AutoFixture为我提供了一个与IDictionary兼容的伪集合。我希望考试不及格。。。特别是,我想把IDictionary交给Moq,并得到一些默认情况下不会抱怨缺少密钥的东西。
我想用类似fixture.UseAutoMoq().ForceRelay<Dictionary<string,string>>()
的东西。
我也愿意接受更好的建议。。。但考虑密封的测试类。我正在测试大量使用这种模式的代码,我想要一个围绕它的测试约定
要实现您的要求,您可以将AutoMoqCustomization
添加的MockRelay
移到知名的集合生成器前面:
[Fact]
public void PassByMovingAutoMoqRelay()
{
var fixture = new Fixture().Customize(new AutoMoqCustomization());
var relay = fixture.ResidueCollectors.OfType<MockRelay>().Single();
fixture.Customizations.Add(relay);
var sut = fixture.Create<MyClass>(); // Doesn't throw
}
然而,我认为这不是一个好主意,就像大多数人一样。NET集合接口是严重违反LSP的行为,并且不能保证自动嘲笑它们会产生有意义的行为——我认为情况恰恰相反。