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创建单独的测试方法的情况下很好地管理这些断言?
您可以传递两个参数进行测试。第一个是date
,第二个可以expectedError
。这样你的TestCase
s 就会看起来像:
[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)
归档时间: |
|
查看次数: |
212 次 |
最近记录: |