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