我想單元測試,使用VS單元測試設施以下方法。如何單元測試BackgroundWorker C#
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)測試它,因爲它仍然在運行,但我想有能力對此進行單元測試。
任何想法? 在此先感謝。
當BackgroundWorker沒有實現任何接口時,你怎麼能做到這一點? – Nick 2013-10-02 19:47:17
您可以製作自己的包裝BackgroundWorker的類並實現一個接口,然後僞造 – reggaeguitar 2016-05-10 22:24:09