NUnit + ServiceStack的Funq AutoWire问题

时间:2013-03-15 11:31:57

标签: nunit servicestack funq

我一直在ServiceStack 3.9.38项目中测试我的业务逻辑,并且在单独运行单元测试时遇到问题导致成功,并且一起运行测试会导致其中一个失败。几个小时后,我做了一个可重复的单元测试。如果运行整个夹具,第二次测试将失败。分别运行测试使它们通过。

using Funq;
using NUnit.Framework;

[TestFixture]
public class Test
{
    interface IBar {}
    class Bar : IBar {}
    class TestFoo { public IBar Bar { get; set; } }

    [Test]
    public void Test1()
    {
        var container = new Container();
        var m = new TestFoo();
        container.Register<IBar>(new Bar());
        Assert.NotNull(container.Resolve<IBar>(), "Resolve");
        container.AutoWire(m);
        Assert.NotNull(m.Bar, "Autowire");
    }

    [Test]
    public void Test2()
    {
        var container = new Container();
        var m = new TestFoo();
        container.AutoWire(m);
        Assert.Throws<ResolutionException>(() => container.Resolve<IBar>());
        Assert.IsNull(m.Bar); // FAILS HERE
    }
}

这是Funq.Container配置的问题吗?或者这是一个错误?任何解决方法?

编辑:我在GitHub上发布了一个问题:https://github.com/ServiceStack/ServiceStack/issues/521

1 个答案:

答案 0 :(得分:3)

AutoWireHelpers.cs有一个私有静态字典autoWireCache 缓存您的解决方案当您运行测试时,它们会从缓存中提取两次,并且您的测试失败。我相信缓存是ServiceStack针对性能提升而定制的funq的一个特性。

没有用于清除缓存的公共接口,因此我没有看到您设置测试的方式的快速解决方案。