问题标签 [semantic-comparison]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
3386 浏览

.net - 将 [AutoFixture] SemanticComparison OfLikeness 应用于序列/集合/数组/IEnumerable

我们编写了一个如下所示的测试。此测试要求我们Equal为 -class 创建了 en -overload CodeTableItem

测试工作正常,但不幸地依赖于Equality-function,这意味着如果我CodeTableItem用一个更多字段扩展 -class,并且忘记扩展Equals-function,单元测试仍然运行绿色,尽管我们没有测试所有字段. 我们想避免这种Equality污染(参见测试特定的平等),它只是为了符合测试而编写的。

我们尝试过使用OfLikeness,并以这种方式重写了测试:

但测试失败,因为Capacity不相等。我编写了多次通过反射运行的代码,并且通常最终实现了忽略字段的重载。有没有办法用OfLikenessor忽略某些字段ShouldEqual?还是有其他方法可以解决这个问题?

0 投票
1 回答
1155 浏览

autofixture - 为什么使用 AutoFixture Freeze、SemanticComparison Likeness 和 CreateProxy 的简单测试不能通过?

我试图了解如何使用使用简单类CreateProxy()的两个实例的功能。Likeness<T>()

在下面的测试中,我使用了Fixture一个Create<T>具有Band两个字符串属性值的实例。

我尝试了许多不同的断言,但问题的关键似乎是该CreateProxy方法没有填充 的属性Band,因此即使我尝试比较Band具有相同属性值的两个实例,该CreateProxy方法中的实例总是有空值。

我一定是做错了什么,但是我已经阅读了我在 Ploeh 博客和 SO 上可以找到的所有内容,并且找不到一个足够简单的示例来与我正在做的事情进行比较。有任何想法吗?

0 投票
1 回答
522 浏览

unit-testing - 使用 Autofixture 的 CreateProxy 来使用 Likeness、SemanticComparison 功能时遇到问题

在我之前询问过 Autofixture 的CreateProxy 方法的问题中,发现了一个潜在的错误

我不认为这个失败的测试是因为这个,而是我对 Likeness.Without(...).CreateProxy() 语法如何工作的持续困惑。考虑以下失败的测试,在该测试中,我通过创建对象的新实例使原始测试 变得稍微复杂一些,并认为它的创建是SUT

这是乐队:

之前的问题不够复杂,无法帮助我理解 the Sourceof theLikeness通常应该是什么。

源是否应该是SUT的输出,在这种情况下,它将与 AutoFixture 创建的模板实例进行比较?

或者源应该是 AutoFixture 创建的模板实例,在这种情况下它将与SUT的输出进行比较?

编辑:更正了测试中的错误

我意识到我错误地将属性分配给了template.Brass实例的和属性Brass 更新后的测试反映了更正,并且所有六个断言现在都通过了。StringsBandvar createdBand = new Band {Brass = template.Brass, Strings = template.Strings}

0 投票
1 回答
600 浏览

autofixture - 为什么 Autofixture Likeness 的行为不像我对这两个测试之一所期望的那样?

鉴于这些类:

为什么这个测试通过...

……这个失败了?(区别在于DrumAndBaseBand实例化)

0 投票
1 回答
491 浏览

c# - 相似——抛光和包装

我使用Ploeh.SemanticComparison'sLikeness作为一种有效表达映射过程预期输出的方式(如Mark Seemann 在 PluralSight 上的优秀高级单元测试课程中所述)。

我正在测试一些数据是否正确映射,如下所示:

但是,我不高兴:-

  1. 我想为 Resemblance 应用一个名称(即命名我的.Without( y => y.ProgrammaticIdentifier)​​自定义)
  2. 我已经失去了对称性Assert.Equal( expected,actual, comparer)(但我肯定需要来自 的错误消息ShouldEqual

有没有更简洁的方式在表达的约束范围内表达这一点?

0 投票
2 回答
489 浏览

c# - 验证单元测试中 [无序] 集合/项目集的完整映射

我正在使用 xUnit.net、AutoFixture 和 SemanticComparison,并且想要验证映射的结果。

在单个项目级别,我很好地涵盖了

给定

  • 这些项目共享一个识别密钥
  • 我想对两边的值元素做一个比较
  • 我不在乎订购(并且不希望我的断言在重新订购时中断)

如何使用尽可能多的 OOTB 组件验证每个输入项是否以DAMP 但 DRY 方式映射到一个且只有一个输出项?

夹具:

骨架测试:

0 投票
2 回答
2109 浏览

c# - 使用 SemanticComparison 比较嵌套对象属性

我正在创建单元测试,它需要逐个成员比较相同类型的两个对象。我决定使用 SemanticComparison 库来处理此任务,而无需编写自定义比较器代码。它在比较平面对象时非常有效,当对象包含嵌套对象时,也需要按成员进行比较时会出现问题。

这不起作用,因为 Inner 对象是通过引用而不是按成员进行比较的:

为了使它工作,我必须创建嵌套对象的代理,以便它覆盖默认的 equals 实现。

好吧,它可以正常工作,但是想象一下,经过一些服务代码重构后,我们引入了导致 Inner 类的 value 属性与预期值不同的 bug。SemanticComparison 的一个很酷的特性是它可以记录导致不等式的成员的名称。但是,在这种情况下,它只会返回不匹配的“Inner”,而不是 Inner 类中特定属性的名称。

我错过了什么吗?是否可以将其配置为能够返回实际的不匹配成员。

对于本例中的简单数据结构而言,这显然不是问题,但对于测试现实生活中的代码可能会带来不便。

0 投票
1 回答
122 浏览

c# - 当抽象类不公开每个构造函数参数时,为什么我不能创建相似代理?

我正在使用 Ploeh 的 SemanticComparison 库取得了巨大的成功——除非我有一个涉及的抽象类不公开其所有构造函数参数。

这是我得到的例外 -

这是我能想到的最简单的例子 -

但是,如果我添加public int NotAge { get; set; }到 abstract class Bar,那么一切都很好。我真的认为这是一个次优的解决方案,因为我不想公开 property age。它只是用来计算其他东西。

我怎样才能解决这个问题而不只是为了测试而暴露属性。是否有另一个库可以在没有这个问题的情况下达到相同的效果?

0 投票
1 回答
1233 浏览

.net - 如何使用 SemanticComparison 比较两个匿名类型或两个不同类型的集合

1.有没有一种简单的方法可以使用 AutoFixture 中的 SemanticComparison 比较两种匿名类型?我当前的问题是我无法为第二个匿名对象构造 Likeness。简化示例:

2.我认为这个问题与第一个问题非常相关,因为它们都使用 SemanticComparison 来创建IEquatable实现。 在这个问题中,Mark Seemann 提供了一个关于如何使用 MSTest 断言和 LINQSequenceEqual方法的答案。

这可以在类似的场景中使用 XUnit2 断言库吗?XUnit支持Assert.Equal()相同类型的集合,是否可以用于不同类型的集合,但是如果元素实现了IEquatable(使用Likeness)。像这样的东西(这不起作用result并且allLikeness有不同的类型):

0 投票
1 回答
302 浏览

c# - 是否可以在 AutoFixture SemanticComparison 中为指定类型设置自定义比较器

是否可以在AutoFixture SemanticComparison 中为对象的指定属性或指定类型设置自定义比较器。

例如,您需要比较具有 DateTime 类型属性的对象。您想使用 Likenes 比较它们,但您希望比较的精度能够丢弃毫秒级别的差异(可能在从数据库中检索 DateTime 后丢失了精度)。