C# 如何进行任务并行性的单元测试
我在.NET中有一个类,它创建并启动一个新的C# 如何进行任务并行性的单元测试,c#,.net,unit-testing,task-parallel-library,vs-unit-testing-framework,C#,.net,Unit Testing,Task Parallel Library,Vs Unit Testing Framework,我在.NET中有一个类,它创建并启动一个新的System.Threading.Tasks.Task,如下所示: public class ScheduledTask { private IFoo _foo; public ScheduledTask(IFoo foo) { _foo = foo; } public void Start() { _task = new Task(() =>
System.Threading.Tasks.Task
,如下所示:
public class ScheduledTask
{
private IFoo _foo;
public ScheduledTask(IFoo foo)
{
_foo = foo;
}
public void Start()
{
_task = new Task(() => Run());
_task.Start();
}
public void Stop(TimeSpan timeout)
{
var taskCompletedNormally = _task.Wait(timeout);
if (taskCompletedNormally)
{
_task.Dispose();
_task = null;
}
}
private void Run(){ // Do some work}
}
如何在C#Net中对
ScheduledTask.Start
和ScheduledTask.Stop
方法进行单元测试?哪些框架可用于此类单元测试,哪些是单元测试线程(或任务并行性)的最佳实践?您可以尝试使用模拟任务
最好的 你们班做得太多了。Start/stop是一个通用函数,它应该在自己的类中
public class StartStopTask
{
private readonly Action _action;
public StartStopTask(Action action)
{
_action = action;
}
public void Start()
{
_task = new Task(_action);
_task.Start();
}
...
}
这个类很容易进行单元测试
bool worked = false;
var startstop = new StartStopTask(() => { worked = true });
startstop.Start();
startstop.Stop(new TimeSpan(0,0,0,10));
Assert.That(worked, Is.True);
然后,您的其他类使用StartStopTask来完成其工作
要么派生
public class ScheduledTask : StartStopTask
{
private IFoo _foo;
public ScheduledTask(IFoo foo)
: base(() => Run())
{
_foo = foo;
}
private void Run(){ // Do some work }
}
或者干脆把工作委派出去
public class ScheduledTask
{
private IFoo _foo;
private readonly StartStopTask _startstop;
public ScheduledTask(IFoo foo)
{
_foo = foo;
_startstop = new StartStopTask(() => Run());
}
public void Start()
{
_startstop.Start();
}
public void Stop(TimeSpan timeout)
{
_startstop.Stop(timeout);
}
private void Run(){ // Do some work }
}
更好的做法是让Run成为一个公共方法,让调用方决定如何运行它