Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 默认参数必须是测试类中的编译时常量_C# - Fatal编程技术网

C# 默认参数必须是测试类中的编译时常量

C# 默认参数必须是测试类中的编译时常量,c#,C#,我有一个测试类,我希望能够通过一个可选类。在我的测试中,我在测试中定义了一个customer类 public class Customer { public string id { get; set; } public string firstName { get; set; } ... } 当测试类加载时,我还初始化了该类的一个实例 public class TestClass { public static string APIKEY = "myapikey"; Cu

我有一个测试类,我希望能够通过一个可选类。在我的测试中,我在测试中定义了一个customer类

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.

首先,问问你自己,你想通过考试获得什么?它已经过测试了吗

然后,如果一个测试依赖于其他测试,那么您做了一些错误的事情,所以请三思。测试应独立于自己的上下文,而不依赖于其他测试


但是,如果两个测试的代码片段相同,那么应该将其提取到两个测试都可以调用的自己的函数中。但是要记住一个好的只测试一个东西。

这是一个支付提供商集成。可以打很多电话。我想做的第一件事是创建一个客户的独立测试,然后我想创建一个不同的客户,以便测试下一个向概要文件添加地址的操作。因此,不是重新运行测试,而是创建另一个客户。不过我同意你的观点,也许我应该创建一个单独的API调用,而不是再次运行create profile测试。这绝对是最好的方法,将该部分提取到它自己的函数中,然后从两个测试中调用它。但我认为,如果不仅仅是集成测试(测试API的责任由供应商承担),那么就没有必要测试API。如果您试图编写单元测试,我建议您使用Moq或其他框架模拟API。然后,您不需要为每个测试运行创建新客户。然后,您只需验证是否使用正确的数据调用API。