DotCover显示0%的虚拟方法模拟

本文关键字:方法 模拟 虚拟 显示 DotCover | 更新日期: 2023-09-27 18:09:08

我使用DotCover来检查单元测试覆盖率。在其中一个方法中,我在SearchResult中返回来自活动目录的结果,但是,我模拟了这个类,但是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的新手(一般的嘲弄),可能有一个问题。

任何想法?

DotCover显示0%的虚拟方法模拟

如果我错了,请纠正我,但是您在这里所做的是定义mock,然后测试此mock是否正确工作?我不认为这是你想要达到的目标。当然,它会导致测试通过——mock工作正常,但它根本没有测试你的应用程序代码——因此覆盖率为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);
}

请注意,我目前无法测试这段代码,但它应该给你一些方向,如何应该是这样做的