validationunit testing中集合/项集的完整映射
我正在使用xUnit.net,AutoFixture和SemanticComparison,并希望validation映射的结果。
在个别项目层面,我很好 。
特定
- 这些项共享一个识别密钥
- 我想对两边的值元素进行比较
- 我不关心订购(并且不希望我的Assertion在重新订购时破坏)
如何使用尽可能多的OOTB组件validation每个输入项是否以DAMP但DRY方式映射到一个且仅一个输出项?
比赛时间:
class Input { public string Name, Description; } class Output { public string Name, Description, IgnoreThisField; }
骨架测试:
[Theory,AutoData] void MappingWorks( Mapper sut, Input[] inputs) { var outputs = sut.Map( inputs); // TODO assert that every input is mapped // TODO assert that we have have no extra outputs }
给出一些AssertResemblance.Like
Collection助手[1],你
- 将它们放在相同的顺序中(这在测试体中是最干净的,因为输入和输出集合将具有不同的类型,除非
SemanticComparison
增长了一个function,我认为它不能被有效地推广) - 让
Ploeh.SemanticComparison
在Name
上进行匹配 - 让xUnit.net V2的Assert.Collection进行相关(它还没有给出一个greate消息)
最终结果是:
var results = from result in outputs orderby result.Name select result; var expectations = from input in inputs orderby input.Name select input; AssertResemblance.Like( expectations, results, configure=>configure .Without(x=>x.IgnoreThisField) );
[1]
static class AssertResemblance { public static void Like( IEnumerable expected, IEnumerable actual ) { Like( expected, actual, x=>x ); } public static void Like( IEnumerable expected, IEnumerable actual, Func, Likeness> configureLikeness ) { Assert2.Collection( actual, SelectShouldEqualAsAction( expected.Select( x => configureLikeness( x.AsSource().OfLikeness () ) ) ) ); } public static void Like( IEnumerable expected, IEnumerable actual, Func, IEnumerable > unify ) { Like ( expected, actual, unify, x=>x ); } public static void Like ( IEnumerable expected, IEnumerable actual, Func,IEnumerable > unify, Func, Likeness> configureLikeness ) { Assert2.Collection( unify( actual ), SelectShouldEqualAsAction( unify(expected).Select( x => configureLikeness( x.AsSource().OfLikeness () ) ) ) ); } static Action[] SelectShouldEqualAsAction( IEnumerable> that ) { return (from it in that select (Action )it.ShouldEqual).ToArray(); } }
给定[非常简洁的] FullOuterJoin操作和xUnit.net V2,您可以将其表达为:
static void VerifyFeaturesetFullyMapped( IEnumerable
- Lync:AVModality.VideoChannel的VideoWindows在成功调用BeginStart后为空(COMException HRESULT:0x80029C4A TYPE_E_CANTLOADLIBRARY)
- 是否可以在asp.net中使用静态LINQ to SQL DataContext维护事务?
- Windows 10通用应用程序文件/目录访问
- C# – 为Roman8 charset创建自己的编码
- 将参数传递给C#中的存储过程
- 通过更改值传递参数到任务 – 行为?
- 如何从文本框中过滤gridview?
- linq .Value Nullable Object必须有一个值。 怎么跳?
- 数据库部署问题