1

単体テストのカバレッジを確認するために DotCover を使用しています。メソッドの 1 つの内部で、SearchResult の Active Directory から結果を返しますが、クラスをモックしましたが、DotCover は 0% を表示します

public virtual T SearchOneRecord(ISearchConfigurator configurator)
    {
        var record = (T)Activator.CreateInstance(typeof(T));
        var searchResult = configurator.DirectorySearcher.FindOne();
        if (searchResult != null)
        {
            AssignActiveDirectoryValue(searchResult, record);
        }

        return record;
    }

[Test]
    public void SearchOneRecord()
    {
        //Arrange
        var configuratorMock = MockRepository.GenerateMock<ISearchConfigurator>();
        var searchMock = MockRepository.GenerateStub<Searcher<NativeDs>>();
        searchMock.Replay();

        var nativeDs = new NativeDs() { PasswordAge = 100 };
        searchMock.Expect(x => x.SearchOneRecord(configuratorMock)).Return(nativeDs);

        //Act
        var record = searchMock.SearchOneRecord(configuratorMock);

        //Assert
        Assert.AreEqual(nativeDs.PasswordAge, record.PasswordAge);
    }

テストはパスしましたが、私は RhinoMock を初めて使用するので (一般的には嘲笑します)、問題がある可能性があります。

何か案が?

4

1 に答える 1

1

私が間違っている場合は訂正してください。ただし、ここで行ったことはモックを定義し、このモックが正しく機能するかどうかをテストすることですか? それはあなたが達成したかったことではないと思います。そしてもちろん、テストに合格します-モックは正しく機能していますが、アプリケーションコードをまったくテストしていません-したがって、カバレッジは0%です。

おそらくやりたいことは、ISearchConfiguratorインスタンスをモックしてから、そのモックをパラメーターとしてメソッドに渡すことです。

[Test]
public void SearchOneRecord()
{
    //Arrange
    var configuratorMock = MockRepository.GenerateMock<ISearchConfigurator>();
    var directorySearcherMock = MockRepository.GenerateMock<IDirectorySearcher>(); // please note I don't know exact type, so you need to ammend it
    var returnValue = ... // initialize with types you expect DirectorySearcher to return
    var searcher = new Searcher(); // initialize class you actually want to test
    configurationMock.Replay();

    configurationMock.Expect(x => x.DirectorySearcher).Return(directorySearcherMock);
    directorySearcher.Expect(x => x.FindOne()).Return(returnValue);
    searchMock.Expect(x => x.SearchOneRecord(configuratorMock)).Return(nativeDs);

    //Act
    var record = searcher.SearchOneRecord(configuratorMock);

    //Assert
    Assert.AreEqual(nativeDs.PasswordAge, record.PasswordAge);
}

現在、このコードをテストすることはできませんが、どのように行うべきかについての指示を与えるはずです.

于 2013-04-15T11:11:30.557 に答える