问题标签 [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.
.net - 将 [AutoFixture] SemanticComparison OfLikeness 应用于序列/集合/数组/IEnumerable
我们编写了一个如下所示的测试。此测试要求我们Equal
为 -class 创建了 en -overload CodeTableItem
:
测试工作正常,但不幸地依赖于Equality
-function,这意味着如果我CodeTableItem
用一个更多字段扩展 -class,并且忘记扩展Equals
-function,单元测试仍然运行绿色,尽管我们没有测试所有字段. 我们想避免这种Equality
污染(参见测试特定的平等),它只是为了符合测试而编写的。
我们尝试过使用OfLikeness
,并以这种方式重写了测试:
但测试失败,因为Capacity
不相等。我编写了多次通过反射运行的代码,并且通常最终实现了忽略字段的重载。有没有办法用OfLikeness
or忽略某些字段ShouldEqual
?还是有其他方法可以解决这个问题?
autofixture - 为什么使用 AutoFixture Freeze、SemanticComparison Likeness 和 CreateProxy 的简单测试不能通过?
我试图了解如何使用使用简单类CreateProxy()
的两个实例的功能。Likeness<T>()
在下面的测试中,我使用了Fixture
一个Create<T>
具有Band
两个字符串属性值的实例。
我尝试了许多不同的断言,但问题的关键似乎是该CreateProxy
方法没有填充 的属性Band
,因此即使我尝试比较Band
具有相同属性值的两个实例,该CreateProxy
方法中的实例总是有空值。
我一定是做错了什么,但是我已经阅读了我在 Ploeh 博客和 SO 上可以找到的所有内容,并且找不到一个足够简单的示例来与我正在做的事情进行比较。有任何想法吗?
unit-testing - 使用 Autofixture 的 CreateProxy 来使用 Likeness、SemanticComparison 功能时遇到问题
在我之前询问过 Autofixture 的CreateProxy 方法的问题中,发现了一个潜在的错误。
我不认为这个失败的测试是因为这个,而是我对 Likeness.Without(...).CreateProxy() 语法如何工作的持续困惑。考虑以下失败的测试,在该测试中,我通过创建对象的新实例使原始测试 变得稍微复杂一些,并认为它的创建是SUT:
这是乐队:
我之前的问题不够复杂,无法帮助我理解 the Source
of theLikeness
通常应该是什么。
源是否应该是SUT的输出,在这种情况下,它将与 AutoFixture 创建的模板实例进行比较?
或者源应该是 AutoFixture 创建的模板实例,在这种情况下它将与SUT的输出进行比较?
编辑:更正了测试中的错误
我意识到我错误地将属性分配给了template.Brass
新实例的和属性Brass
。更新后的测试反映了更正,并且所有六个断言现在都通过了。Strings
Band
var createdBand = new Band {Brass = template.Brass, Strings = template.Strings}
autofixture - 为什么 Autofixture Likeness 的行为不像我对这两个测试之一所期望的那样?
鉴于这些类:
为什么这个测试通过...
……这个失败了?(区别在于DrumAndBaseBand
实例化)
c# - 相似——抛光和包装
我使用Ploeh.SemanticComparison
'sLikeness
作为一种有效表达映射过程预期输出的方式(如Mark Seemann 在 PluralSight 上的优秀高级单元测试课程中所述)。
我正在测试一些数据是否正确映射,如下所示:
但是,我不高兴:-
- 我想为 Resemblance 应用一个名称(即命名我的
.Without( y => y.ProgrammaticIdentifier)
自定义) - 我已经失去了对称性
Assert.Equal( expected,actual, comparer)
(但我肯定需要来自 的错误消息ShouldEqual
)
有没有更简洁的方式在表达的约束范围内表达这一点?
c# - 验证单元测试中 [无序] 集合/项目集的完整映射
我正在使用 xUnit.net、AutoFixture 和 SemanticComparison,并且想要验证映射的结果。
给定
- 这些项目共享一个识别密钥
- 我想对两边的值元素做一个比较
- 我不在乎订购(并且不希望我的断言在重新订购时中断)
如何使用尽可能多的 OOTB 组件验证每个输入项是否以DAMP 但 DRY 方式映射到一个且只有一个输出项?
夹具:
骨架测试:
c# - 使用 SemanticComparison 比较嵌套对象属性
我正在创建单元测试,它需要逐个成员比较相同类型的两个对象。我决定使用 SemanticComparison 库来处理此任务,而无需编写自定义比较器代码。它在比较平面对象时非常有效,当对象包含嵌套对象时,也需要按成员进行比较时会出现问题。
这不起作用,因为 Inner 对象是通过引用而不是按成员进行比较的:
为了使它工作,我必须创建嵌套对象的代理,以便它覆盖默认的 equals 实现。
好吧,它可以正常工作,但是想象一下,经过一些服务代码重构后,我们引入了导致 Inner 类的 value 属性与预期值不同的 bug。SemanticComparison 的一个很酷的特性是它可以记录导致不等式的成员的名称。但是,在这种情况下,它只会返回不匹配的“Inner”,而不是 Inner 类中特定属性的名称。
我错过了什么吗?是否可以将其配置为能够返回实际的不匹配成员。
对于本例中的简单数据结构而言,这显然不是问题,但对于测试现实生活中的代码可能会带来不便。
c# - 当抽象类不公开每个构造函数参数时,为什么我不能创建相似代理?
我正在使用 Ploeh 的 SemanticComparison 库取得了巨大的成功——除非我有一个涉及的抽象类不公开其所有构造函数参数。
这是我得到的例外 -
这是我能想到的最简单的例子 -
但是,如果我添加public int NotAge { get; set; }
到 abstract class Bar
,那么一切都很好。我真的认为这是一个次优的解决方案,因为我不想公开 property age
。它只是用来计算其他东西。
我怎样才能解决这个问题而不只是为了测试而暴露属性。是否有另一个库可以在没有这个问题的情况下达到相同的效果?
.net - 如何使用 SemanticComparison 比较两个匿名类型或两个不同类型的集合
1.有没有一种简单的方法可以使用 AutoFixture 中的 SemanticComparison 比较两种匿名类型?我当前的问题是我无法为第二个匿名对象构造 Likeness。简化示例:
2.我认为这个问题与第一个问题非常相关,因为它们都使用 SemanticComparison 来创建IEquatable
实现。
在这个问题中,Mark Seemann 提供了一个关于如何使用 MSTest 断言和 LINQSequenceEqual
方法的答案。
这可以在类似的场景中使用 XUnit2 断言库吗?XUnit支持Assert.Equal()
相同类型的集合,是否可以用于不同类型的集合,但是如果元素实现了IEquatable(使用Likeness)。像这样的东西(这不起作用result
并且allLikeness
有不同的类型):
c# - 是否可以在 AutoFixture SemanticComparison 中为指定类型设置自定义比较器
是否可以在AutoFixture SemanticComparison 中为对象的指定属性或指定类型设置自定义比较器。
例如,您需要比较具有 DateTime 类型属性的对象。您想使用 Likenes 比较它们,但您希望比较的精度能够丢弃毫秒级别的差异(可能在从数据库中检索 DateTime 后丢失了精度)。