JustMock 部分类,模拟私有方法



我想用私有方法模拟一个分部类。但是不调用安排的方法。而是正常的。我没有收到任何错误。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 Class:

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);
}

虽然仍然无法让它工作...

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

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

最新更新