Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# JustMock部分类,mock私有方法_C#_.net_Mocking_Justmock - Fatal编程技术网

C# JustMock部分类,mock私有方法

C# JustMock部分类,mock私有方法,c#,.net,mocking,justmock,C#,.net,Mocking,Justmock,我想用私有方法模拟部分类。但是没有调用排列的方法。取而代之的是普通的。我没有发现任何错误。它与GetAppleModel最初的功能无关,因为它不应该在我的测试用例中做任何事情。我希望GetAppleModel的整个主体不做任何事情,只返回任务 测试代码: Task<AppleModel> task = new Task<AppleModel>(() => appleModel); var taskWorker = TaskWorkerFactory.Create(

我想用私有方法模拟部分类。但是没有调用排列的方法。取而代之的是普通的。我没有发现任何错误。它与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
Task Task=新任务(()=>appleModel);
var taskWorker=TaskWorkerFactory.Create(taskModel);
非公开的
.Arrange((AppleTaskWorker)taskWorker,“GetAppleModel”,ArgExpr.IsAny())
.DoInstead(()=>
{
//...
})
.返回(任务);
taskWorker.Start();
//一些断言
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();
}
public异步void Start(){
_appleModel=await-GetAppleModel(_-guid);
}
专用异步任务GetAppleModel(Guid serviceGuid)
{
var命令=新的ServiceCommand(serviceGuid);
等待HandlerService.Start(命令);
return命令。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);
}
公共类1
{
私人布尔助手()
{
返回true;
}
公共bool TestMe()
{
if(Helper())返回true;
返回false;
}
}
[测试方法]
公共void TestMethod1()
{
var class1=新的class1();
Mock.NonPublic.Arrange(class1,“Helper”).Returns(false);
bool-actual=class1.TestMe();
Assert.IsFalse(实际);
}

但还是不能让它工作…

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

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
Task Task=新任务(()=>appleModel);
var taskWorker=TaskWorkerFactory.Create(taskModel);
动态TaskWorkerRapper=Mock.NonPublic.Wrap((AppleTaskWorker)taskWorker);
非公开的
.Arrange(taskWorkerRapper.GetAppleModel(ArgExpr.IsAny()).Returns(task);
taskWorker.Start();
//一些断言

您的任务应该是
task task=task.FromResult(appleModel)。避免更新任务我将.Result改为使用wait。