0

私がテストする必要があるコードでは、そのような外部依存関係が見つかりました:

var something = GConfig.SConfig[Type.ServiceType1].Names;

この部分のコードは次のようになります。

using System;
using System.Collections.Concurrent;
using System.Collections.Generic;

namespace Class
{
    public sealed class GConfig
    {

        public ConcurrentDictionary<Type, GConfigIt> SConfig { get; set; }

        public GConfig()
        {
            SConfig = new ConcurrentDictionary<Type, GConfigIt>();
            throw new InvalidOperationException("Error");
        }
    }

    public enum Type
    {
        ServiceType1,
        ServiceType2
    }

    public class GConfigIt
    {
        public List<string> Names { get; set; }

        public GConfigIt()
        {
            Names = new List<string>();
        }
    }
}

その依存関係をシムする必要がありますが、私自身では完全な解決策を見つけることができず、部分的にしか見つかりません:

GConfigIt (およびシミング名) の場合:Fakes.ShimGConfigIt.AllInstances.NamesGet

SConfig をシミングする場合:Fakes.ShimGConfig.AllInstances.SConfigGet

しかし、接続が見つかりません。完全にシムする方法です。

PS 私は単なるテスターであり、既存のコードを変更することはできません。変更を行うには、開発者にそれを行うよう説得する必要があります (つまり、GConfig の追加インターフェイス)。しかし、開発者は、それが「簡単なテスト」または「テストのためのテスト」のためだけの変更ではなく、実際に行う必要があることを確認する必要があります。

4

1 に答える 1

0

さて、あなたは実際に正しい軌道に乗っています。から始めてFakes.ShimGConfig.AllInstances.SConfigGet、それが機能したら、辞書をシムする必要があります。

おそらくFakes.ShimConcurrentDictionary.AllInstances.ItemGetType、必要な GConfigIt を返すことができるようなもの、おそらくスタブです。

上記のスタブのプロパティを設定するか、名前に対して以前に行っていたことを行うことができます。

並行辞書をシムできると仮定しています。そうでない場合でも、まだ行き詰まっていません。SConfigGet をシムして、有効な値を入力できる SConfigGet のスタブを返すだけです。これは、実装についてあまり想定していないため、他の方法よりも優れている可能性があります。

于 2013-10-08T23:22:04.443 に答える