【发布时间】:2016-04-26 02:03:10
【问题描述】:
大家好,我是测试新手,所以请放轻松:)。我无法测试我的 api 控制器。我创建了一个单独的类来测试控制器,但我遇到了“对象引用未设置为有效实例”的问题
我要测试的api控制器和方法:
namespace Project.Controllers.Api
{
[Authorize]
[Route("/api/entries/{date}")]
public class EntryController : Controller
{
private ILogger<EntryController> _logger;
private ITrackerRepository _repository;
public EntryController(ITrackerRepository repository, ILogger<EntryController> logger)
{
_repository = repository;
_logger = logger;
}
[HttpGet("")]
public JsonResult Get(string date)
{
// DateTime date mm/dd/yyyy
DateTime dateTime = Convert.ToDateTime(date);
var result = Mapper.Map<IEnumerable<EntryViewModel>>(_repository.GetDiaryEntries(dateTime, User.Identity.Name));
if (result != null)
{
return Json(result);
}
else
{
return Json(null);
}
}
}
我尝试使用 xunit 进行单元测试:
namespace test.Project.UnitTests
{
public class EntryControllerTest
{
public EntryControllerTest()
{
}
[Fact]
public void TestInvalidViewModels()
{
// Created test mock/empty repository
TestProjectRepository testRepo = new TestProjectRepository();
var controller = new EntryController(testRepo, null);
var result = controller.Get("01/12/1899");
Assert.Equal(result, null);
}
}
}
我在 Controller.cs 文件中遇到“对象引用未设置为对象的实例”的问题。非常感谢您的帮助,谢谢。
【问题讨论】:
-
控制器中的哪一行抛出了 NullReference 异常?也许它与记录器有关;当您从测试中创建 EntryController 时,它作为“null”传入。
-
@denvercoder9 我也猜到了记录器,但注意到在显示的示例中没有使用它。在测试设置中没有为控制器定义
User来访问,并且有对User.Identity.Name的调用,所以这可能是罪魁祸首。前提是 OP 没有排除任何其他重要细节。
标签: c# asp.net unit-testing