【发布时间】:2015-02-23 13:37:55
【问题描述】:
我有上面的例子,我需要解耦代码以简化测试,我怎样才能做到这一点才能使用 mock 进行测试?
public sealed class XCommand : BaseCommand
{
public IResult Author()
{
//DO SOMETHING AND RETURN BASE.
return base.run();
}
}
public abstract class BaseCommand
{
public virtual IResult Run()
{
ProcessStartInfo startInfo = new ProcessStartInfo();
using (Process process = new Process() { StartInfo = startInfo })
{
process.Start();
process.WaitForExit();
String error = process.StandardError.ReadToEnd().Trim();
String output = process.StandardOutput.ReadToEnd().Trim();
return new Result()
{
Error = error,
Output = output
};
}
}
}
sealed class Result : IResult
{
public String Error { get; set; }
public String Output { get; set; }
}
有很多类会继承 BaseCommand 类,我需要单独测试每个类,那么我如何解耦这段代码才能做到这一点?
谢谢
【问题讨论】:
-
“我如何解耦这段代码”是什么意思?什么现在没有解耦?
-
我需要创建一个模拟来测试这样的东西。 XCommand command = new XCommand();,但是这里总是会尝试执行一个进程,有时没有app可以执行。你能理解吗?
-
创建一个子类 BaseCommand 的模拟有什么问题?
-
为什么不将
Author设为可以在测试类中覆盖的虚拟方法? -
为什么不使用
Run方法注入一个类而不是使用基类?
标签: c# .net unit-testing mocking