c# - xUnit.net IsType 在返回类型的 MS 测试中等效
问题描述
我正在遵循本指南,并且正在尝试使用 MS Test 编写类似的测试。MS Test 是否有一个在转换成功IsType()
时返回对象的对象?
从这个比较中,我看到我可以使用IsInstanceOfType()
但返回类型是void
.
我正在尝试在 MS Test 中实现这一行:
var badRequestResult = Assert.IsType<BadRequestObjectResult>(result);
[Fact]
public async Task IndexPost_ReturnsBadRequestResult_WhenModelStateIsInvalid()
{
// Arrange
var mockRepo = new Mock<IBrainstormSessionRepository>();
mockRepo.Setup(repo => repo.ListAsync()).Returns(Task.FromResult(GetTestSessions()));
var controller = new HomeController(mockRepo.Object);
controller.ModelState.AddModelError("SessionName", "Required");
var newSession = new HomeController.NewSessionModel();
// Act
var result = await controller.Index(newSession);
// Assert
var badRequestResult = Assert.IsType<BadRequestObjectResult>(result);
Assert.IsType<SerializableError>(badRequestResult.Value);
}
是的,我可以使用as
然后使用IsInstanceOfType
......只是想知道是否有单线。
var badRequestResult = result as BadRequestObjectResult;
Assert.IsInstanceOfType(badRequestResult, typeof(BadRequestObjectResult));
解决方案
MSTest 中没有我遇到过的等效版本。
如果进行强制转换,则无需检查实例是否属于类型。只需检查它是否不为空。
// Act
var result = await controller.Index(newSession);
// Assert
var badRequestResult = result as BadRequestObjectResult;
Assert.IsNotNull(badRequestResult, "Expected BadRequestObjectResult");
Assert.IsInstanceOfType(badRequestResult.Value, typeof(SerializableError));
否则,您可以创建自己的断言
public static class AssertExtension {
public static TExpected AssertIsType<TExpected>(this object actual, string message = null)
where TExpected : class {
TExpected result = actual as TExpected;
Assert.IsNotNull(result, message);
return result;
}
}
提供所需的行为
// Assert
var badRequestResult = result.AssertIsType<BadRequestObjectResult>();
badRequestResult.Value.AssertIsType<SerializableError>();
推荐阅读
- ios - Xcode 10.1 - Swift 4.2 - locationManager(_:didUpdateLocations:) 已重命名为 locationManager(_:didUpdate:)
- javascript - 检查嵌入在另一个数组中的数组中的文档之间的差异
- java - next() vs Single() 哪个有效?
- sql-server - SQL 语法计算多个餐单 ID 中每个餐单 ID 的总菜单项
- android - 基于 mediarecorder 的 Camera2 应用程序录制低质量的视频。有人知道为什么吗?
- python - 在 Python 中将连接日期更改为日期时间
- php - Laravel 显示错误 App\Http\Controllers\UserController::admin_side_update() 的参数太少,通过了 1 个,预期正好有 2 个
- php - PhpStorm 代码检查允许在没有类型的对象上调用方法
- regex - Conditionals and regex doubts with grok filter in logstash
- json - Kafka Connect,获取 JsonConverter 的 Json Schema