私は単体テストに手を出し始め、私のプレゼンター メソッドの 1 つをテストするいくつかのテストを作成しました。このテストには、私のデータ アクセス クラスのモックと、特に 1 つのメソッドが必要です。これは、私のデータ アクセス クラスの元のメソッドです。
public IEnumerable<IArea> GetAreaList()
    {
        ConnectToTFSProject();
        XmlNode areaNode = GetAreaNode();
        List<IArea> areaList = new List<IArea>();
        foreach (XmlNode node in areaNode.FirstChild.ChildNodes)
        {
            IArea area = new Area() { AreaName = node.Attributes["Name"].Value };
            areaList.Add(area);
        }
        areaList.Sort();
        return areaList;
    }
次のようなさまざまなシナリオでプレゼンター メソッドをテストしたいと思います。
- エリアの通常のリスト
- 領域の空のリスト
- 重複のある領域のリスト
- 空の文字列領域を 1 つ含むリストまたは領域
私が最初に考えたのは、これらのシナリオごとに個別のモック データ アクセス クラスを作成することでした。これは少し面倒だと思ったので、メソッドを少し変更して、現在のテストに固有のデータを含むさまざまな xml ファイルを読み取れるようにしました。私のモックメソッドの外観は次のとおりです。
public IEnumerable<IArea> GetAreaList(string dataSource)
    {
        List<IArea> areaList = new List<IArea>();
        XmlTextReader areaReader = new XmlTextReader(dataSource);
        while (areaReader.Read())
        {
            if (areaReader.NodeType == XmlNodeType.Text)
                areaList.Add(new Area() { AreaName = areaReader.Value });
        }
        return areaList;
    }
このモック メソッドは、次のように PresenterTest クラスから呼び出されます。
[TestMethod]
    public void PopulateAreaComboBox_WithValidAreaList()
    {
        //Act
        _presenter.PopulateAreaComboBox(mockFolderPath + "MockAreaList.xml");
        //Assert
        Assert.AreEqual(3, _view.AreaListLoaded.Count);
    }
    [TestMethod]
    public void PopulateAreaComboBox_WithEmptyAreaList()
    {
        //Act
        _presenter.PopulateAreaComboBox(mockFolderPath + "MockEmptyAreaList.xml");
        //Assert
        Assert.AreEqual(0, _view.AreaListLoaded.Count);
    }
さて、ここでの問題は、元のメソッドの署名を変更する必要があることです (dataSource パラメーターへの参照を追加することにより)。
public IEnumerable<IArea> GetAreaList(string dataSource)
このパラメーターは単体テストにのみ必要なため、実際のプレゼンター クラスから null の値がこのメソッドに渡され、使用されることはありません。
これが間違っていることはわかっていますが、これをどのように達成する必要がありますか? 各テスト データ シナリオを設定する個別のモック データ アクセス クラスを作成する必要がありますか?