你好,
现在我只能像这样访问夹具。
[Theory, AutoData]
public void Dummy(string dummy)
{
MethodBase method = MethodBase.GetCurrentMethod();
IFixture fixture = method.GetCustomAttribute<AutoDataAttribute>().Fixture;
Assert.Equal(dummy, dummy);
}
我得到“AutoDataAttribute.Fixture”是过时的警告。
有没有更好的方法来访问在 AutoData 属性中创建的夹具。 我想混合参数和手动创建和注入。
谢谢
你好,
当然,只需要求底层装置解析IFixture
实例,它就会返回 self:
c#
[Theory, AutoData]
public void Dummy(string dummy, IFixture fixture)
{
}
对你起作用吗? :眨眼:
是的,这确实是一个更好的方法。
你能把它放在 AutoData wiki 上吗?
我到处搜索以找到如何做到这一点。
没想到IOC容器把IFixture注册了。
非常感谢!
您为什么要尝试向 IoC 注册夹具? 根据我的经验,从来不需要
主要是为了最小化复杂的重复接口设置的测试方法参数。
[Theory, AutoMoqData]
public void Dummy(IFixture fixture, [Frozen]Mock<IComplexInterfaceWith30SubInterfaces> needed, TestClass sut)
{
//This will add interfaces setups for needed by retrieving them from the IoC container or by property access.
SetupInterfaces(fixture, needed);
//We can now use needed injected in sut.
}
我有一个更简单的例子
我你更喜欢这个
[Theory, AutoMoqData]
public void Dummy(IFixture fixture)
{
Assert.Equal(String.Empty, String.Empty);
}
在这个
[Fact]
public void Dummy2()
{
IFixture fixture = new Fixture().Customize(new AutoMoqCustomization());
Assert.Equal(String.Empty, String.Empty);
}
主要是为了最小化复杂的重复接口设置的测试方法参数。
同意,我在测试中也有类似的用法。 唯一的区别是我更喜欢在这些辅助重复方法前加上When()
前缀,因此测试如下所示:
c#
public void Test([Frozen] IProvider provider, ISut sut, IFixture fixture)
{
// arrange
WhenProviderReturnsOnlyInitializedEntities(provider, fixture);
.....
}
不过基本上思路还是一样的😉
最有用的评论
是的,这确实是一个更好的方法。
你能把它放在 AutoData wiki 上吗?
我到处搜索以找到如何做到这一点。
没想到IOC容器把IFixture注册了。
非常感谢!