【问题标题】:xUnit, Moq Setup for Multiple Parameters return null instead of ObjectxUnit,多个参数的 Moq 设置返回 null 而不是 Object
【发布时间】:2021-11-10 16:26:00
【问题描述】:

我正在使用 .NET CORE 5 应用程序中的 moq 和 Fixture 进行 xUnit 测试。

我的实现类调用QueryResultSummaryHelper,通过调用GetReport方法获取QueryResultSummary对象。我有多个具有不同参数集的GetReport 方法。

在测试类中,我在 QueryResultSummaryHelper moq 对象上使用 Setup,它返回正确的对象,其中有 3 个参数,但是在另一个类中,我尝试在 GetReport 上使用 4 个参数的 Setup 并获得 @987654328 @value,不确定我在拼图中遗漏了什么??

QueryResultHelper Defination

 public interface IQueryResultHelper
{
    QueryResultSummary GetReport(int recordsCount, bool error, dynamic dataObject);
    QueryResultSummary GetReport(int recordsCount, bool error, Exception e);
    QueryResultSummary GetReport(int recordsCount, bool error, string customMessage, dynamic dataObject);
    QueryResultSummary GetReport(int recordsCount, bool error, string customMessage, Exception e);
}

我正在尝试设置以下方法...

 QueryResultSummary GetReport(int recordsCount, bool error, string customMessage, dynamic dataObject);

Test Class

public class SiteEntityTest : SetUps
{
    private readonly SiteEntity sut;

    public SiteEntityTest() 
    {
        sut = new SiteEntity(
            appAmbientStateMoq.Object, 
            queryResultHelperMoq.Object,
           );
    }

    [Fact]
    [Trait("Method", "GetSite")]
    public async Task ShouldReturn_Site_IfExist()
    {
       // other arrange code...
        var queryResultSummaryMoq = new QueryResultSummary
        {
            RecordsCount = siteMoq == null ? 0 : 1,
            IsRecordExist = true,
            Error = false,
            ExecutionMessage = QueryExecutionStatusEnum.Success.ToString(),
            Exceptions = (Exception)null,
            CustomMessage = SiteSearchStatus
        };


        queryResultHelperMoq.Setup(x => x.GetReport(
           siteWithStatusDataViewMoq == null ? 0 : 1,
           false,
           SiteSearchStatus,
           siteWithStatusDataViewMoq
           )).Returns(queryResultSummaryMoq);

    }

另一个类中的以下设置确实有效并返回对象值而不是 Null

 queryResultHelperMoq.Setup(x => x.GetReport(
           contraventionGuideImageMoq == null ? 0 : 1,
           false,
           contraventionGuideImageMoq
           )).Returns(queryResultSummaryMoq);

【问题讨论】:

  • 您是否尝试过使用It.IsAny<dynamic>() 而不是siteWithStatusDataViewMoq 作为Setup 中的最后一个参数?
  • 我正在尝试 It.IsAny(siteWithStatusDataViewMoq) 但我认为语法不正确
  • 您不必将siteWithStatusDataViewMoq 传递给It.IsAny。调用它而不传递任何参数,就像我在上一条评论中所做的那样
  • 它抛出错误 queryResultHelperMoq.Setup(x => x.GetReport( siteWithStatusDataViewMoq == null ? 0 : 1, false, SiteSearchStatus, It.IsAny() )).Returns(queryResultSummaryMoq) ;
  • It.IsAny 表示:不关心实例本身,只检查类型。

标签: c# xunit .net-5 autofixture


【解决方案1】:
queryResultHelperMoq.Setup(x => x.GetReport(
   siteWithStatusDataViewMoq == null ? 0 : 1,
   false,
   SiteSearchStatus,
   It.IsAny<SiteWithStatusDataView>()
 )).Returns(queryResultSummaryMoq);

【讨论】:

    猜你喜欢
    • 2022-01-27
    • 2017-04-11
    • 2016-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多