gpt4 book ai didi

c# - IQueryable 单元或集成测试

转载 作者:太空狗 更新时间:2023-10-30 01:32:00 25 4
gpt4 key购买 nike

我有一个 web api,我正在公开一个端点:

api/Holiday?name={name}

这是 web api 的 Controller 获取方法:

public IQueryable<Holiday> GetHolidayByName(string name)
{
return db.Holiday.Where(n => string.Equals(n.Name, name));
}

我如何为此编写单元/集成测试来检查名称是否相等?我可以检查结果不为空,但是我有点困惑如何检查名称是否相等:

[TestMethod]
public void GetHoliday_GetHolidayByName()
{
// Arrange
HolidaysController controller = new HolidaysController();

// Act
IQueryable<Holiday> actionResult = controller.GetHolidayByName("Spain");

//Assert
Assert.IsNotNull(actionResult);

//any attempt to check names are equal results in a fail
//For instance this fails
var result = controller.GetHolidayByName("Spain") as OkNegotiatedContentResult<Holiday>;
Assert.AreEqual("Spain", result.Content.Name);
}

最佳答案

测试看起来像这样,您可以在其中使用 linq 来验证返回的所有结果是否满足您的条件。

[TestMethod]
public void GetHoliday_GetHolidayByName()
{
// Arrange
string name = "Spain";
HolidaysController controller = new HolidaysController();

// Act
IQueryable<Holiday> actionResult = controller.GetHolidayByName(name);

//Assert
Assert.IsNotNull(actionResult);
Assert.IsTrue(actionResult.All(n => string.Equals(n.Name, name));
}

这里假设数据库会为你提供你想要的测试数据。否则,您将不得不进行一些设计更改以允许提供模拟/虚假数据。

如果您要连接到一个实际的数据库,那么这更像是一个集成测试而不是单元测试。

关于c# - IQueryable 单元或集成测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38706864/

25 4 0