yur*_*art 3 c# unit-testing class moq
在我班级的方法中嘲笑局部变量时遇到了一些麻烦.
我尝试模拟我的Worker类,但它调用一个返回null值的方法,我的上下文变量变为null.因此,当我尝试获取Name属性时,我得到一个异常.
如何强制CreateWorkerContext()
返回模拟值?可能有办法模拟局部变量(context
)?
谢谢!
我的代码将详细说明问题:
namespace Moq
{
class Program
{
static void Main(string[] args)
{
var workerMock = new Mock<Worker>();
workerMock.Object.GetContextName();
}
}
public class Worker
{
public string GetContextName()
{
// something happens and context does not create (imitated situation)
WorkerContext context = CreateWorkerContext();
// exception because _context is null
return context.Name;
}
private WorkerContext CreateWorkerContext()
{
// imitate that context is not created
return null;
}
}
public class WorkerContext
{
public string Name { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)
这里可以说一些事情.
首先, - 但这只是我的意见 - 你应该避免部分模拟(部分模拟=模拟一个没有实现接口的抽象类,因此,保留未被模拟的方法的原始实现.).最好的方法是拥有一个可以实现的IWorker
界面Worker
.
第二 - 我会创造严格的嘲笑.松散的模拟看起来像一个很好的快捷方式,但通常会让你的方法和属性在你不打算时返回默认值(null
在你的情况下)
第三 - 我会注射WorkerContext
.如果你不能注入它,因为你需要使用来自.ctor参数进行参数化,然后注入一个WorkerContextFactory
允许你模拟你的创建和参数化的WorkerContext
归档时间: |
|
查看次数: |
1469 次 |
最近记录: |