xUnit.net在返回类型的MS测试中等效的IsType

时间:2018-04-25 15:01:07

标签: c# mstest xunit.net

我跟随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));

1 个答案:

答案 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));