如何在假轻松的情况下主张musthavehappend(collection.that.contains(object)



我有一个课程存储库,如下所示

A.CallTo(
            () => _courseClientStatusRepository.GetTnCoursesForClientStatus()).Returns(new List<CourseClientStatusCreationDto>
                {
                    new CourseClientStatusCreationDto { CourseTnId = Enums.CourseLevel.Beginner  },
                    new CourseClientStatusCreationDto { CourseTnId = Enums.CourseLevel.Intermediate, },
                    new CourseClientStatusCreationDto { CourseTnId = Enums.CourseLevel.Advanced,  }
                }
            );

在ACT I中有一种调用

的方法
void CreateClientCourseStatus(List<CourseClientStatusDto> courseClientStatusDto);

ICourseClientStatusRepository的方法

在断言中,我有以下内容。第一个断言通过,第二和第三断言失败了。

A.CallTo(
            () => _courseClientStatusRepository.CreateClientCourseStatus(A<List<CourseClientStatusDto>>.Ignored))
            .MustHaveHappened();
        A.CallTo(
            () => _courseClientStatusRepository.CreateClientCourseStatus(A<List<CourseClientStatusDto>>.That.Contains(A<CourseClientStatusDto>.Ignored)))
            .MustHaveHappened();

        A.CallTo(
            () => _courseClientStatusRepository.CreateClientCourseStatus(A<List<CourseClientStatusDto>>.That.Contains(A<CourseClientStatusDto>.That.Matches(
                x => x.CourseTnId == Enums.CourseLevel.Beginner               
                ))))
                .MustHaveHappened();

我至少期望第二个断言能够通过它的实例courseclientstatusdto的实例,其中它的特定值并不重要,因此我使用了.ignored属性。

是否有一些我做错了什么可以断言是否包含特定对象(使用伪造的对象。

@ntu,我可以问一下您正在使用哪种版本的faceiteasy?

A<T>.Ignored属性仅适用于在呼叫配置或验证期间用作参数说明器时;它不能在其他地方使用,例如在Contains方法中。截至伪造的4.1.1,您应该得到一个明显的错误,以表明这一点。例如,使用FakeIteasy 4.3.0,当我进行测试的近似值时,我会看到这一点:

Test 'FakeItEasyQuestions2015.Ntu.NestedConstraint' failed: System.InvalidOperationException : An argument constraint, such as That, Ignored, or _, cannot be nested in an argument.

我们经常更新软件包,因此升级错误修复和改进总是一个好主意。

您可以用这样的东西替换最后两张检查:

 A.CallTo(() => _courseClientStatusRepository.CreateClientCourseStatus(A<List<CourseClientStatusDto>>.That.Not.IsEmpty()))
    .MustHaveHappened();
A.CallTo(() => _courseClientStatusRepository.CreateClientCourseStatus(
A<List<CourseClientStatusDto>>.That.Matches(l => l.Exists(i => i.CourseTnId == Enums.CourseLevel.Beginner))))
    .MustHaveHappened();

当我发表评论时,我不禁注意到,在您的安排中,不使用A.CallTo的返回值,因此您不会指定任何实际行为(除非您只是为了简短…)。考虑在您的项目中添加fackiteasy.analyzer.csharp;它会警告您这样的问题!

相关内容

最新更新