gpt4 book ai didi

c# - 单元测试 API Controller (asp.net 5、xunit)时对象未设置为引用

转载 作者:太空宇宙 更新时间:2023-11-03 12:47:16 25 4
gpt4 key购买 nike

大家好,我是测试新手,所以请放轻松 :)。我在测试我的 api Controller 时遇到问题。我已经创建了一个单独的类来测试 Controller ,但我遇到了“对象引用未设置为有效实例”的问题

我要测试的 api Controller 和方法:

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 文件中遇到“对象引用未设置为对象实例”的问题。非常感谢任何帮助,谢谢。

最佳答案

根据您的代码,此 User.Identity.Name 是您最可能导致错误的原因。

[Fact]
public void TestInvalidViewModels()
{
//Arrange
var username = "username@example.com";
var identity = new GenericIdentity(username, "");
var fakeUser = new GenericPrincipal(identity, roles: new string[] { });

TestProjectRepository testRepo = new TestProjectRepository();
var controller = new EntryController(testRepo, null);
controller.User = fakeUser;
//Act
var result = controller.Get("01/12/1899");
//Assert
Assert.Equal(result, null);
}

关于c# - 单元测试 API Controller (asp.net 5、xunit)时对象未设置为引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36846728/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com