我正在用ASP编写一个TDD应用程序的测试。然而,当我测试一个Create(Post)控制器时,服务器返回给我:
Assert.IsAssignableFrom() Failure: Value is null.
字符串
这里是repository:
public class Repository
{
private IList<Subject> _subjects = new List<Subject>()
{
new Subject() {
SubjectId = Guid.Parse("1fe63de5-4408-4d7b-a40a-bad231b7bd9f"),
Title = "Math",
Credits = 8
},
new Subject() {
SubjectId = Guid.Parse("de331c36-6b31-4dd9-b50d-f677e51b987c"),
Title = "Chemistry",
Credits = 10,
Teacher = new Teacher(){
Dni = 2210890,
FirstName = "Albert",
SurName = "Einstein",
Email = "[email protected]",
},
Students = new List<Student>()
{
new Student() {
FirstName = "Cristiano",
SurName = "Ronaldo",
Email = "[email protected]",
EnrollmentDate = DateTime.UtcNow
},
new Student()
{
FirstName = "Leonel",
SurName = "Messi",
Email = "[email protected]",
EnrollmentDate = DateTime.UtcNow
}
}
}
};
型
这是控制器:
[Route("api/[controler]/[action]")]
[ApiController]
public class SubjectController : ControllerBase
{
private Repository _repo;
public SubjectController(Repository repo)
{
_repo = repo;
}
public IActionResult CreateSubject(Subject subject)
{
if(subject == null)
{
Console.WriteLine("Subject Object sent is null");
}
_repo.Create(subject);
return RedirectToAction(nameof(Index));
}
}
型
最后,这是xUnit测试代码:
public class UnitTest2
{
private SubjectController _context;
private Repository _repo;
public UnitTest2()
{
_repo = new Repository();
_context = new SubjectController(_repo);
}
[Fact]
public void CreateSubjectTest()
{
//Arrange
var subject = new Subject()
{
SubjectId = Guid.Parse("761c6dc1-4b02-4db5-bf91-5452efb44c1a"),
Title = "History",
Credits = 10,
};
//Act
var result = _context.CreateSubject(subject) as ObjectResult;
//Assert
Error Message: Assert.IsAssignableFrom() Failure: Value is null
Expected: typeof(Microsoft.AspNetCore.Mvc.CreatedAtRouteResult)
Actual: null
Assert.IsAssignableFrom<CreatedAtRouteResult>(result);
Assert.Equal((int)HttpStatusCode.Created, result!.StatusCode);
}
};
型
我必须提到的是,我没有使用Moq库,也没有使用内存数据库,只是简单的列表。我不确定这个细节是否有帮助。
不管怎样,如果有人能给我一些帮助我会很感激的因为我是新手。
1条答案
按热度按时间x3naxklr1#
您将
result
软转换为ObjectResult
。as
转换尝试转换,如果失败,则返回转换类型的默认值(在本例中为null)。因为你试图Assert你的
result
是一个CreatedAtRouteResult
,所以没有真实的需要将它预先转换成某种东西,你的测试将以一种更有意义的方式失败。