在单元测试中传递guid作为查询

时间:2016-06-05 01:37:22

标签: c# unit-testing asp.net-web-api

我正在尝试进行返回对象模型的单元测试并失败:

[HttpGet, HttpHead]
[Route("{id}", Name = RouteNames.GetById)]
[ResponseType(typeof(Api.BusinessEvent))]
public async Task<IHttpActionResult> Get(Guid id)
{
    return await GetOrStatusCodeAsync(id).ConfigureAwait(true);
}

[TestMethod, TestCategory(Unit)]
public void BusinessEventController_Get_Returns_InternalError()
{
    // arrange
    var scope = new DefaultScope();
    var expectedQuery = new Api.BusinessEvent();
    scope.BusinessEventProviderMock
        .Setup(x => x.GetAllAsync())
        .Throws(new Exception());

    // act
    var actual = scope.InstanceUnderTest.Get(expectedQuery)
        .AssertInternalError(ApiErrors.Generic);

    // assert
    actual.Should().NotBeNull();
    scope.LoggingProviderMock
        .VerifyLogApiError(scope.ExpectedLogCategories, ApiErrors.Generic);
}

我在expectedQuery变量上收到此错误:

  

无法从'Model.BusinessEvent'转换为'System.Guid'

我如何创建查询以使其输入为guid?

我做错了什么以及如何解决?

1 个答案:

答案 0 :(得分:1)

鉴于:

Task<IHttpActionResult> Get(Guid id)

并提供了当前示例,您似乎需要从

更改expectedQuery
var expectedQuery = new Api.BusinessEvent();

到变量类型Guid

例如:

var expectedQuery = Guid.NewGuid();

示例中的所有其他代码看起来都是特定于您的环境的自定义代码。如果没有Minimal, Complete, and Verifiable example,只需要假设和猜测其他代码的作用。这限制了您可以获得的答案质量。

希望我的观察是准确的,它解决了你的问题。否则你将需要优化你的原始帖子。