C#中的收益率回报-对字段的公开性进行失败测试

编程之神

今天,我遇到了与C#有关的问题。我必须编写一个程序,它将通过一些测试。我实现的所有功能均正常运行,但是有一项测试禁止使用公共字段,但测试失败。

我有一个实现IEnumerable的通用类,引起问题的是:

public IEnumerator<R> GetEnumerator()
{
    foreach (R r in roomList)
        yield return r;
}

如果我将此类归为“ return null”,则测试可以通过。我不知道有什么问题吗?这是一个测试报告:

Result Message:       Assert.Fail failed. Detected type "Exercise.Hotel`2+<GetEnumerator>d__0" with public filed(s) "Exercise.Hotel`2[R,SC] <>4__this, R <r>5__1, Enumerator <>7__wrap2", which is not allowed.

这也是测试代码。老实说,我对它的工作方式不是很熟悉。当然,它也可能是由不良测试引起的。

        var withPublicField = types.Where(t => !t.IsEnum)
            .Where(t => t.GetFields(BindingFlags.Public | BindingFlags.Instance).Count() > 0)
            .Where(t => !t.Name.StartsWith("<>c__DisplayClass"))
            .ToDictionary(t => t.FullName, t => t.GetFields(BindingFlags.Public | BindingFlags.Instance));

感谢帮助。这是我的第一个问题,所以我希望我一切都很好:)

彼得·杜尼奥

您正在谈论这是一个奇怪的测试。

迭代器方法(即其中包含方法的方法yield return)触发失败的原因是C#编译器重写了此类方法,以返回将方法实现为状态机的隐藏类的实例。正是这种类型包含了不允许的公共字段。

就我个人而言,我认为失败是一种误报。我同意公共字段通常是可憎的,但是在这种情况下,您要处理的是隐藏的,由编译器生成的代码。这种特殊情况应该很好。

希望在这种情况下,您可以通过解释“这不是我的错!”来抑制失败。替代方法是实现自己的类,该类实现方案的IEnumerator<T>类型,并且该类当然不包含公共字段。

编辑:我注意到在查看测试代码时,它已经尝试排除捕获变量(即Name.StartsWith("<>c__DisplayClass"))的编译器生成代码因此,也许测试作者会对编译器生成的<GetEnumerator>类型添加类似的排除项(或者当然要[CompilerGenerated]根据Lee的回答进行检查)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

等效于delphi中C#的收益率

来自分类Dev

更紧凑的“收益率回报”方法?

来自分类Dev

RSpec:如何测试收益率自我

来自分类Dev

Clojure是否具有等于C#的收益率?

来自分类Dev

收益率回报与LINQ Select之间的结果不同

来自分类Dev

R中的收益率曲线排序

来自分类Dev

在此示例中,为什么“收益率”和“收益率收益率”具有相同的行为?

来自分类Dev

在此示例中,为什么“收益率”和“收益率收益率”具有相同的行为?

来自分类Dev

在C#8 IAsyncEnumerable <T>中并行收益率返回

来自分类Dev

收益率无效,但收益率有效

来自分类Dev

ES6收益率(收益率1)(收益率2)(收益率3)()

来自分类Dev

收益率IEnumerable <IEnumerable <... >>

来自分类Dev

收益率-内存优化

来自分类Dev

Ruby Blocks(收益率)

来自分类Dev

Laravel中的刀片引擎-收益率不起作用

来自分类Dev

收益率合并排序函数中的错误

来自分类Dev

尝试对基于回调的函数进行混合以使其与生成器一起使用(收益率),这是行不通的

来自分类Dev

Scala的未来内部收益率

来自分类Dev

IEnumerator收益率返回类型错误

来自分类Dev

使用收益率而不返回类型

来自分类Dev

PHP收益率,奇怪的行为

来自分类Dev

收益率可重入吗?

来自分类Dev

OpenCV 3.1 ANN预测收益率

来自分类Dev

瓦拉收益率未恢复

来自分类Dev

IEnumerator收益率返回类型错误

来自分类Dev

收益率怪异行为

来自分类Dev

使用收益率而不返回类型

来自分类Dev

执行收益率返回后的代码

来自分类Dev

将列表与收益率连接