【发布时间】:2020-01-12 04:06:39
【问题描述】:
我目前正在对我的 REST API 进行单元测试。当我将列表或自定义对象作为参数时,我遇到了问题。
第一个控制器方法有几个参数,包括一个字符串列表。我不知道如何在列表的内联数据中添加值。
private static List<string> TestData()
{
var testcase = new List<string>();
testcase.Add("DEV");
testcase.Add("IT");
return testcase;
}
[Theory]
[InlineData(0, 10, TestData, "", 3)]
public async Task TestGetPersonItems(int pageNumber, int pageSize, List<string> departments, string filterText, int resultCount)
{
using (API_DB_Context context = new API_DB_Context(_options))
{
// Arrange
//List<string> departments = new List<string>();
//departments.Add("DEV");
List<string> locations = new List<string>();
PersonenController controller = new PersonenController(context, _mapper);
// Act
var controllerResponse = await controller.Get(pageNumber, pageSize, departments, locations, filterText);
// Assert
if (resultCount > 0)
{
var objectResult = Assert.IsAssignableFrom<ObjectResult>(controllerResponse);
ICollection<PersonDTO> model = Assert.IsAssignableFrom<ICollection<PersonDTO>>(objectResult.Value);
Assert.Equal(resultCount, model.Count);
}
else
{
Assert.IsType<NotFoundObjectResult>(controllerResponse);
var objectResponse = controllerResponse as ObjectResult;
Assert.Equal(404, objectResponse.StatusCode);
}
}
}
对于第二个控制器方法,我有一个自定义对象和一个整数作为参数。当我开始测试第二个测试时,我收到错误“找不到名为 'SearchData' 的公共静态成员(属性、字段或方法)”
public static IEnumerable<object[]> SearchData()
{
yield return new object[] {
new SearchDTO
{
searchText = "",
page = 0,
pageSize = 10
}
};
}
[Theory]
[MemberData(nameof(SearchData), 3)]
public async Task TestSearchPersonItems(SearchDTO searchDTO, int resultCount)
{
using (API_DB_Context context = new API_DB_Context(_options))
{
// Arrange
PersonenController controller = new PersonenController(context, _mapper);
// Act
var controllerResponse = await controller.SearchPersons(searchDTO);
// Assert
if (resultCount > 0)
{
var objectResult = Assert.IsAssignableFrom<ObjectResult>(controllerResponse);
ICollection<PersonDTO> model = Assert.IsAssignableFrom<ICollection<PersonDTO>>(objectResult.Value);
Assert.Equal(resultCount, model.Count);
}
else
{
Assert.IsType<NotFoundObjectResult>(controllerResponse);
var objectResponse = controllerResponse as ObjectResult;
Assert.Equal(404, objectResponse.StatusCode);
}
}
}
我有什么不同的地方或者我可以做的更好吗?
提前谢谢你!
【问题讨论】:
-
SearchData需要,如错误所说,public和static并且与测试在同一类中。 andrewlock.net/… -
会员数据需要返回所有参数。您使用的属性不正确
-
@ColinM:代码上写着:public static IEnumerable