Autofixture: 访问由 AutoData 属性创建的夹具。

创建于 2018-04-25  ·  7评论  ·  资料来源: AutoFixture/AutoFixture

你好,
现在我只能像这样访问夹具。

[Theory, AutoData]
public void Dummy(string dummy)
{
    MethodBase method = MethodBase.GetCurrentMethod();
    IFixture fixture = method.GetCustomAttribute<AutoDataAttribute>().Fixture;


    Assert.Equal(dummy, dummy);
}

我得到“AutoDataAttribute.Fixture”是过时的警告。

有没有更好的方法来访问在 AutoData 属性中创建的夹具。 我想混合参数和手动创建和注入。
谢谢

question

最有用的评论

是的,这确实是一个更好的方法。

你能把它放在 AutoData wiki 上吗?
我到处搜索以找到如何做到这一点。
没想到IOC容器把IFixture注册了。

非常感谢!

所有7条评论

你好,

当然,只需要求底层装置解析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 上吗?

@malylemire1我将来会在某个地方创建一个文档站点。 但是,请随时将此示例添加到我们的 wiki 😅

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

ecampidoglio picture ecampidoglio  ·  7评论

Accc99 picture Accc99  ·  4评论

Ephasme picture Ephasme  ·  3评论

Ridermansb picture Ridermansb  ·  4评论

zvirja picture zvirja  ·  3评论