Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在fake中断言MustHaveHappend(Collection.That.Contains(object))很容易_C#_Unit Testing_Tdd_Repository Pattern_Fakeiteasy - Fatal编程技术网

C# 如何在fake中断言MustHaveHappend(Collection.That.Contains(object))很容易

C# 如何在fake中断言MustHaveHappend(Collection.That.Contains(object))很容易,c#,unit-testing,tdd,repository-pattern,fakeiteasy,C#,Unit Testing,Tdd,Repository Pattern,Fakeiteasy,我有一个课程库,如下所示: A.CallTo( () => _courseClientStatusRepository.GetTnCoursesForClientStatus()).Returns(new List<CourseClientStatusCreationDto> { new CourseClientStatusCreationDto { CourseTnId = Enu

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

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,  }
                }
            );
我至少希望第二个断言传递给它,它希望一个CourseClientStatusDto类型的对象的实例,其中它的特定值并不重要,因此我使用了.Ignored属性


如果集合包含特定对象(使用fake it easy.MustHaveOccomed()方法),是否有可能是我在做错误的断言?

@Ntu,请问您使用的是FakeiTasy的哪个版本

A.Ignored
属性仅在调用配置或验证期间用作参数说明符时适用;它不能在其他地方使用,例如在
Contains
方法中。从Fakeitesy 4.1.1开始,您应该会得到一个明确的错误,指出这一点。例如,在Fakeitesy 4.3.0中,我在运行您的测试近似值时看到:


测试“FakeiTeasyQuestions 2015.Ntu.NestedConstraint”失败:System.InvalidOperationException:参数约束(例如,已忽略或_)不能嵌套在参数中。

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

您可以将最后两张支票替换为以下内容:

 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(()=>_-courseClientStatusRepository.CreateClientCourseStatus(A.That.Not.IsEmpty())
.一定发生过();
A.CallTo(()=>_courseClientStatusRepository.CreateClientCourseStatus(
A.That.Matches(l=>l.Exists(i=>i.CourseTnId==Enums.CourseLevel.初学者)))
.一定发生过();

在我发表评论时,我不得不注意到,在您的Arrange中,没有使用
A.CallTo
的返回值,因此您不会指定任何实际行为(除非您为了简洁起见将其省略…)。考虑将项目添加到项目中;它会警告你这些问题

@Blair,最后两个检查正在进行中,您的代码有帮助,谢谢。我正在使用3.4.0版的Fake It Easy。是的,我想在表格中总结代码。我肯定会添加fakeitesy.Analyzer.CSharp
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();
 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();