如何在一种方法上用不同的情况编写断言测试,并且在与不同的响应案例进行比较时,所有这些都通过了?

Bin*_*Tie 5 c# json unit-testing assert

是否可以测试许多情况,例如:

[TestCase(""), TestCase(null), TestCase("String"), TestCase("2010-07-14T00:00:00.000Z"), TestCase("201-07-14T00:00:00.000Z")]
Run Code Online (Sandbox Code Playgroud)

当我从带有反序列化json的API获得响应到我的Error对象时,我认为响应主体消息和HttpStatusCode在API的不同VALIDATIONS之后是正确的,并且从我的断言中它是正确的.

我从Json反序列化为泛型类型的方法:

public TType GetResponseJsonAsObject<TType>(HttpResponseMessage content)
        {
                var contentResult = content.Content.ReadAsStringAsync().Result;
                var specialCase = JsonConvert.DeserializeObject<TType>(contentResult);
                return specialCase;
        }
Run Code Online (Sandbox Code Playgroud)

这是我的测试方法:

[TestCase(""), TestCase(null), TestCase("String"), TestCase("2010-07-14T00:00:00.000Z"), TestCase("201-07-14T00:00:00.000Z")]
        public void PostAPI_SpecialCaseRequestDate_WithError_ProceedsSuccessfully(string date)
        {
            // arrange
            SpecialCaseRequest data = new SpecialCaseRequest()
            {
                Name = "Test",
                ExpirationDateTime = date,
            };

            // act + assert 
            string json = JsonConvert.SerializeObject(data, Formatting.Indented);
            PostMethods sendJsonDemo = new PostMethods();
            var response = sendJsonDemo.SendJsonDemo(json);
            var responseBody = sendJsonDemo.GetResponseJsonAsObject<Error>(response); 
            Assert.IsNotNull(responseBody); 

            Assert.AreEqual("Date parameter cannot be empty string", responseBody.Message);
            Assert.AreEqual("Date parameter cannot be empty null", responseBody.Message);
        }
Run Code Online (Sandbox Code Playgroud)

想法是在一个方法中测试所有情况并成功传递它们,但在这种情况下它将在第二个断言上失败,因为在从API响应体验消息验证后有这个字符串:"日期参数不能为空字符串"并且第一个断言将是传递,但它会在第二个断言失败,因为来自api的responseBody.Message是:"日期参数不能为空字符串".与其他TestCases相同,例如null或"String"等,因为从TestCase(null)它开始,它将在第一个断言失败,因为在从api响应体验验后带有不同的字符串responseBody.Message ="Date参数不能为空null".如何在不为每个TestCase创建单独的测试方法的情况下很好地管理这些断言?

Dov*_*opa 3

您可以传递两个参数进行测试。第一个是date,第二个可以expectedError。这样你的TestCases 就会看起来像:

[TestCase("", "Error1"), TestCase(null, "Error2"), TestCase("String", "Error3")]
[TestCase("2010-07-14T00:00:00.000Z", "Error4")]
[TestCase("201-07-14T00:00:00.000Z", "Error5")]
Run Code Online (Sandbox Code Playgroud)

你只会有一个Assert

Assert.AreEqual(expectedError, responseBody.Message);
Run Code Online (Sandbox Code Playgroud)