作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试使用 VS 单元测试工具进行单元测试,方法如下。
void Get(string name, Action<string> callBack);
这是单元测试器
[TestMethod]
public void Test()
{
Action<string> cb = name =>
{
Assert.IsNotNull(name);
};
var d = new MyClass();
d.Get("test", cb);
}
唯一的问题是内部实现使用了 BackgroundWorker,因此回调是在另一个线程上调用的。这是内部实现。
public void Get(string name, Action<string> callBack)
{
callBackString = callBack;
GetData(name);
}
private void GetData(string name)
{
BackgroundWorker bw = new BackgroundWorker();
bw.DoWork += bw_DoWork;
bw.RunWorkerCompleted += bw_RunWorkerCompleted;
bw.RunWorkerAsync(name);
}
private void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
//do work here
if (null != callBackString)
callBackString("ok");
}
当然,因为 Get() 立即返回,测试成功完成并且测试停止,因此 RunWorkerCompleted 永远不会被执行。我可以通过普通应用程序 (WPF) 轻松测试它,因为它一直在运行,但我希望能够对此进行单元测试。
有什么想法吗?提前致谢。
最佳答案
类似于:
[TestMethod]
public void Test()
{
bool running = true;
string result = null;
Action<string> cb = name =>
{
result = name;
running = false;
};
var d = new MyClass();
d.Get("test", cb);
while(running)
{
Thread.Sleep(100);
}
Assert.IsNotNull(result);
}
虽然您可能想在其中添加一些东西以阻止测试在失败时永远运行...
关于c# - 如何对 BackgroundWorker C# 进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1411286/
我是一名优秀的程序员,十分优秀!