3

ServiceStack 3.9.38 プロジェクトでビジネス ロジックをテストしてきましたが、単体テストを個別に実行すると成功し、テストをまとめて実行するとそのうちの 1 つが失敗するという問題に直面しました。数時間後、再現可能な単体テストを作成しました。フィクスチャ全体を実行すると、2 番目のテストは失敗します。テストを個別に実行すると、合格になります。

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

4

1 に答える 1

3

AutoWireHelpers.csには、解像度をキャッシュしているプラ​​イベート スタティック ディクショナリ autoWireCacheがあります。テストを 2 回実行すると、キャッシュから値が取得され、テストは失敗します。キャッシングは、パフォーマンス向上のための ServiceStack のカスタマイズされた funq の機能だと思います。

そのキャッシュをクリアするための公開インターフェイスがないため、テストのセットアップ方法に対する簡単な解決策はありません。

于 2013-03-15T17:18:36.333 に答える