- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我想为以下代码编写单元测试用例
HomeController.cs
[HttpPost]
[ActionName("CreateDemo")]
public async Task<IHttpActionResult> CreateDemo([FromBody] MyRequest request)
{
if (request == null)
{
return BadRequest("request can not be null");
}
if (request.MyID == Guid.Empty)
{
return BadRequest("MyID must be provided");
}
}
我试过像下面这样,我猜这是不正确的方式
[TestMethod]
public async Task NullCheck()
{
try
{
var controller = new HomeController();
var resposne = await controller.CreateDemo(null);
Assert.AreEqual(); // not sure what to put here
}
catch (HttpResponseException ex) //catch is not hit
{
Assert.IsTrue(
ex.Message.Contains("request can not be null"));
}
}
最佳答案
每个单元测试应测试一个需求或关注点。您的方法实现了两个要求:
1) 如果请求为null
,则返回带有预定义错误消息的BadRequestErrorMessageResult
对象。2) 如果请求的 MyID
属性为空 GUID
,则返回带有另一个预定义错误消息的 BadRequestErrorMessageResult
对象。
这意味着我们应该有两个单元测试:
[Test]
public async Task CreateDemo_returns_BadRequestErrorMessageResult_when_request_is_null()
{
// Arrange
var controller = new HomeController();
// Act
var response = await controller.CreateDemo(null);
// Assert
Assert.IsInstanceOf<BadRequestErrorMessageResult>(response);
Assert.AreEqual("request can not be null", response.Message);
}
[Test]
public async Task CreateDemo_returns_BadRequestErrorMessageResult_when_request_ID_is_empty_GUID()
{
// Arrange
var controller = new HomeController();
var request = new MyRequest(Guid.Empty);
// Act
var response = await controller.CreateDemo(request);
// Assert
Assert.IsInstanceOf<BadRequestErrorMessageResult>(response);
Assert.AreEqual("MyID must be provided", response.Message);
}
您可以更进一步,将这些测试中的每一个分成两个,一个测试返回的对象是否属于预期类型,另一个验证返回的对象状态是否符合预期(例如 Message
string符合预期)。这样您每个测试将有一个断言。
旁注:
你用 nunit
标签标记了这个问题,所以我提供了使用该框架的代码。不过在您的示例中,您使用了来自 Microsoft 单元测试框架的 [TestMethod]
属性。如果您想使用该框架,则必须进行一些更改,例如将 Assert.IsInstanceOf
替换为 Assert.IsInstanceOfType
。
我假设 GUID
通过其构造函数传递给 MyRequest
,该构造函数将其分配给 MyID
。
我不是来自网络世界,但我发现 BadRequest
方法有一个重载,如果 string
作为其参数传递,则返回 BadRequestErrorMessageResult
。
关于c# - 如何为 BadRequest 编写单元测试用例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39115867/
我最近购买了《C 编程语言》并尝试了 Ex 1-8这是代码 #include #include #include /* * */ int main() { int nl,nt,nb;
早上好!我有一个变量“var”,可能为 0。我检查该变量是否为空,如果不是,我将该变量保存在 php session 中,然后调用另一个页面。在这个新页面中,我检查我创建的 session 是否为空,
我正在努力完成 Learn Python the Hard Way ex.25,但我无法理解某些事情。这是脚本: def break_words(stuff): """this functio
我是一名优秀的程序员,十分优秀!