我跟随this guide,我试图用MS Test编写类似的测试。在演员表演成功时,MS Test是否有IsType()
返回对象?
从this comparison开始,我看到我可以使用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));
答案 0 :(得分:3)
MSTest中没有我遇到过的等效版本。
如果是强制转换,则无需检查实例是否为类型。只需检查它是否为空。
if(percentMarkup.value != "" && salesPrice.value != "" )
{
var salesPriceInt = parseInt(salesPrice.value);
var percentMarkupInt = parseInt(percentMarkup.value);
unitPrice.value = unitPriceInt * (1+percentMarkupInt);
}
否则你可以创建自己的断言
safeParseInt
提供所需的行为
// Act
var result = await controller.Index(newSession);
// Assert
var badRequestResult = result as BadRequestObjectResult;
Assert.IsNotNull(badRequestResult, "Expected BadRequestObjectResult");
Assert.IsInstanceOfType(badRequestResult.Value,typeof(SerializableError));