2015-08-17 27 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

相关问题