充分利用MyData
類的依賴參數和施工的MyWork
類中注入它。爲了進行單元測試,可以在單元測試中模擬依賴關係,以確保它以預期的方式調用已定義的依賴項的合同。
通常,這意味着:
- 定義的界面處的依賴性即IMyData
- 構造簽名應該期望接口類型,而不是具體的類型。
作爲最終結果,如下您的代碼將被轉換:
interface IMyData
{
DataTable GetMyData();
}
class MyData : IMyData
{
public DataTable GetMyData()
{
return Query.MyDataBase.ResultDT();
}
}
class MyWork
{
private IMyData _myData;
public MyWork(IMyData myData)
{
_myData = myData;
}
public int DoWork()
{
DataTable DT = _myData.GetMyData();
return DT.Rows.Count;
}
}
作爲一步,你應該檢查出的設計原則,因爲這類型的設計說明了爲什麼它們的存在。
更多關於Wikipedia: SOLID (OO design)
編輯:
你的單元測試,然後會看起來像(假設你正在使用的起訂量嘲諷框架):
[TestMethod()]
public void TestMyWork()
{
var mockMyData = Mock<IMyData>();
mockMyData.Setup(x => x.GetMyData()).Returns(new DataTable());
MyWork work = new MyWork(mockMyData);
int result = work.DoWork();
Assert.AreEqual(1, result);
}
..但在真正的世界,你會更可能實例化MyWork
與真實的MyData
實例如下(除非你使用依賴注入框架,如MEF或團結):
var myWork = new MyWork(new MyData());