2015-08-17 60 views
1

我有一個測試類,我希望能夠傳遞一個可選類到。在我的測試中,我在測試中定義的客戶類默認參數在測試類中必須是編譯時常量

public class Customer 
{ 
    public string id { get; set; } 
    public string firstName { get; set; } 
    ... 
} 

當測試類負載

public class TestClass 
{ 
    public static string APIKEY = "myapikey"; 

    Customer dummyCustomer = new Customer() { ...}; 

這一直在我的測試罰款我也初始化了這樣一個實例,這樣我就可以做

[TestMethod] 
public void IsAPIActive() 
{ ... 
    var response = _service.GetResponse(dummyCustomer) 

,但現在我希望能夠從另一個調用一個測試以及可選的客戶傳遞給類

[TestMethod] 
public int CanCreateCustomer(Customer customer = dummyCustomer) 
{ .... 
    return response.Customer.CustomerId; 

爲了使現有的測試能夠選擇默認的虛擬客戶,但我的一些其他測試可以將不同的客戶對象傳遞給它。

當我加入這個默認的客戶,雖然我剛剛得到一個消息:

Default parameter value for 'customer' must be a compile-time constant. 

回答

1

首先,問你自己,你想要什麼實現與測試?是否已經測試

然後,如果一個測試依賴於其他測試,那麼你做錯了什麼,所以再想一想。測試應該是分離到它自己的上下文和而不是依賴於其他測試。

雖然如果你有兩個測試的代碼片段相同,那麼你應該將它提取到它自己的函數中,這兩個測試都可以調用。但是請記住一個測試只測試一個的事情。

+0

這是一個支付提供商集成。有很多可以進行的呼叫。 https://developer.optimalpayments.com/zh/documentation/customer-vault-api/getting-started/ 我想做的第一件事就是創建一個客戶的獨立測試,但後來我想讓一個不同的客戶爲了測試向配置文件添加地址的下一個操作。因此,不要重新進行測試,而是要創建另一個客戶。不過,我明白你的觀點,也許我應該創建一個單獨的API調用,而不是再次運行創建配置文件測試。 – GrahamJRoy

+1

這絕對是實現它的首選方式,將該部分提取到它自己的函數中,然後從兩個測試中調用它。但是我認爲不需要測試API,如果它不只是集成測試(測試API的責任有供應商)。如果你想編寫單元測試,我建議你用Moq或其他框架來模擬API。然後,您不需要爲每次測試運行創建一個新客戶。然後,您只需驗證是否使用正確的數據調用API。 – Rikard

相關問題