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

C# DotCover显示虚拟方法模拟的0%,c#,unit-testing,mocking,C#,Unit Testing,Mocking,我正在使用DotCover检查单元测试覆盖率。在其中一个方法中,我在SearchResult中从active directory返回结果,但我模拟了该类,但DotCover显示0% public virtual T SearchOneRecord(ISearchConfigurator configurator) { var record = (T)Activator.CreateInstance(typeof(T)); var searchResult

我正在使用DotCover检查单元测试覆盖率。在其中一个方法中,我在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);
    }
公共虚拟T SearchOneRecord(ISearchConfigurator配置器)
{
var record=(T)Activator.CreateInstance(typeof(T));
var searchResult=configurator.DirectorySearcher.FindOne();
if(searchResult!=null)
{
AssignActiveDirectoryValue(搜索结果、记录);
}
返回记录;
}
[测试]
公共无效SearchOneRecord()
{
//安排
var configuratorMock=MockRepository.GenerateMock();
var searchMock=MockRepository.GenerateStub();
searchMock.Replay();
var nativeDs=new nativeDs(){PasswordAge=100};
searchMock.Expect(x=>x.SearchOneRecord(configuratorMock)).Return(nativeDs);
//表演
var记录=searchMock.SearchOneRecord(configuratorMock);
//断言
aresequal(nativeDs.PasswordAge,record.PasswordAge);
}
测试通过了,但由于我是RhinoMock新手(一般来说是mock),可能存在一个问题


有什么想法吗?

如果我错了,请纠正我,但您在这里所做的是定义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);
}
[测试]
公共无效SearchOneRecord()
{
//安排
var configuratorMock=MockRepository.GenerateMock();
var directorySearcherMock=MockRepository.GenerateMock();//请注意,我不知道确切的类型,所以您需要修改它
var returnValue=…//使用期望DirectorySearcher返回的类型初始化
var searcher=newsearcher();//初始化实际要测试的类
configurationMock.Replay();
Expect(x=>x.DirectorySearcher).Return(directorySearcherMock);
Expect(x=>x.FindOne()).Return(returnValue);
searchMock.Expect(x=>x.SearchOneRecord(configuratorMock)).Return(nativeDs);
//表演
var记录=searcher.SearchOneRecord(configuratorMock);
//断言
aresequal(nativeDs.PasswordAge,record.PasswordAge);
}

请注意,我目前无法测试这段代码,但它应该会为您提供一些如何进行测试的指导。

如果我错了,请纠正我,但您在这里所做的是定义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);
}
[测试]
公共无效SearchOneRecord()
{
//安排
var configuratorMock=MockRepository.GenerateMock();
var directorySearcherMock=MockRepository.GenerateMock();//请注意,我不知道确切的类型,所以您需要修改它
var returnValue=…//使用期望DirectorySearcher返回的类型初始化
var searcher=newsearcher();//初始化实际要测试的类
configurationMock.Replay();
Expect(x=>x.DirectorySearcher).Return(directorySearcherMock);
Expect(x=>x.FindOne()).Return(returnValue);
searchMock.Expect(x=>x.SearchOneRecord(configuratorMock)).Return(nativeDs);
//表演
var记录=searcher.SearchOneRecord(configuratorMock);
//断言
aresequal(nativeDs.PasswordAge,record.PasswordAge);
}

请注意,我目前无法测试这段代码,但它应该会为您提供一些如何测试的指导。

嗯,恐怕某些覆盖率在两种情况下都是零值。“100%”并不意味着你要测试所有重要的东西。嗯,恐怕有些覆盖率无论如何都是零值。“100%”并不意味着你要测试所有重要的东西。