3
我一直在ServiceStack 3.9.38项目中测试自己的业务逻辑,并且在单独运行单元测试导致成功时遇到问题,并且一起运行测试会导致其中一个失败。几个小时后,我做了一个可重复的单元测试。如果你运行整个夹具,第二个测试将失败。分开运行测试使它们通过。NUnit + ServiceStack的Funq AutoWire问题
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
噢,是的,我知道它在某个地方是静止的......但它真的不是一个好地方!我认为它应该是容器实例特定的...所以解决方案可以是使AutoWireHelpers类不是静态的,autoWireCache不是静态的,并且使该类成为Container的字段。但是这是一个内核重构,所以我们应该听取@mythz – 2013-03-15 17:52:41
@PavelKudinov现在这个问题已经解决,并且不再使用静态方法。 – mythz 2013-03-19 14:17:53