JustMock部分类,模拟私有方法

问题描述 投票:1回答:1

我想用私有方法模拟一个部分类。但是没有调用排列的方法。而只是正常的。我没有得到任何错误。这与GetAppleModel最初的作用无关,因为它不应该在我的测试用例中做任何事情。我希望GetAppleModel的完整主体什么也不做,只返回任务

测试代码:

Task<AppleModel> task = new Task<AppleModel>(() => appleModel);

var taskWorker = TaskWorkerFactory.Create(taskModel);

Mock.NonPublic
    .Arrange<Task<AppleModel>>((AppleTaskWorker) taskWorker, "GetAppleModel", ArgExpr.IsAny<Guid>())
    .DoInstead(() =>
    {
        //...
    })
    .Returns(task);

taskWorker.Start();
//Some Assertion

AppleTaskWorker类:

public async void Start() {
    _appleModel = await GetAppleModel(_guid);
}

private async Task<AppleModel> GetAppleModel(Guid serviceGuid)
{
    var command = new ServiceCommand(serviceGuid);
    await HandlerService.Start(command);
    return command.GetResult();
}

我从JustMock开发人员那里找到了一个例子:

例:

public class Class1
{
    private bool Helper()
    {
        return true;
    }

    public bool TestMe()
    {
        if (Helper()) return true;

        return false;

    }

}

[TestMethod]
public void TestMethod1()
{
    var class1 = new Class1();
    Mock.NonPublic.Arrange<bool>(class1, "Helper").Returns(false);
    bool actual = class1.TestMe();
    Assert.IsFalse(actual);
}

仍然无法让它工作,但......

c# .net mocking justmock
1个回答
1
投票

我得到了它的工作。您需要实际使用动态包装器:

Task<AppleModel> task = new Task<AppleModel>(() => appleModel);

var taskWorker = TaskWorkerFactory.Create(taskModel);

dynamic taskWorkerWrapper = Mock.NonPublic.Wrap((AppleTaskWorker)taskWorker);

Mock.NonPublic
    .Arrange<Task<AppleModel>>(taskWorkerWrapper.GetAppleModel( ArgExpr.IsAny<Guid>())).Returns(task);

taskWorker.Start();
//Some Assertion
© www.soinside.com 2019 - 2024. All rights reserved.