gpt4 book ai didi

c# - 如何对 BackgroundWorker C# 进行单元测试

转载 作者:太空狗 更新时间:2023-10-30 00:17:32 24 4
gpt4 key购买 nike

我正在尝试使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com