創建單元測試以測試我發送給我的WCF服務的參數的最佳方法是什麼?發送到WCF服務的單元測試參數
我有一個項目,我有一個存儲庫類,說我的WCF服務。它看起來是這樣的:
public class MyRepository : IMyRepository
{
public Customer GetCustomer(int customerId)
{
var client = new MyWCFServiceClient();
MyWCFServiceCustomer customerWCF = client.GetCustomer(customerId);
Customer customer = ConvertCustomer(customerWCF);
return customer;
}
//Convert a customer object recieved from the WCF service to a customer of
//the type used in this project.
private Customer ConvertCustomer(MyWCFServiceCustomer customerWCF)
{
Customer customer = new Customer();
customer.Id = customerWCF.Id;
customer.Name = customerWCF.Name;
return customer;
}
}
(這顯然簡化)
現在我想編寫單元測試來檢查我發送給我的服務從信息庫中的參數是正確的。在上面的例子中,這將是毫無意義的,因爲我只發送customerId就像它傳入一樣,但在我的真實代碼中,存儲庫類中有更多參數和更多邏輯。
問題是生成的服務客戶端類(MyWCFServiceClient)沒有接口,所以我不能在我的測試中嘲笑它(或者我錯了嗎?)。
編輯:我錯了。有一個界面!請參閱下面的答案。
一個解決辦法是有一個包裝服務客戶端,只有重新發送的參數,並返回結果的類:
public class ClientProxy : IClientProxy
{
public MyWCFServiceCustomer GetCustomer(int customerId)
{
var client = new MyWCFServiceClient();
return client.GetCustomer(customerId);
}
}
public interface IClientProxy
{
MyWCFServiceCustomer GetCustomer(int customerId);
}
這樣,我可以給該類的接口,從而模擬它。但編寫這個「代理」類並保持更新似乎很乏味,所以我希望你有更好的解決方案! :)
這裏是我在尋找問題火災?我把我的客戶端拉進了一個抽象類,它引入了IService&ClientBase,然後我可以讓Controller使用它作爲注入點。在執行單元測試時,在構建模擬/僞造時,ChannelFactory仍會查找配置。嗯,也許我會試試看,並試着抓住它。 –