单元测试 - 如何在 Mock 时匹配匿名类型参数
目录
前言
假设,我们需要单元测试如下方法:
|
|
而对于 Repository.Query
,我们需要进行 Mock
。
怎么实现?
不匹配具体参数值
如果我们不关心参数的具体值,可以简单地让它匹配任何 object
:
|
|
但是,如果要验证具体参数值时,下列方法无法工作:
|
|
因为单元测试和实际执行生成的匿名类型分别位于不同的 Assembly
,不能匹配。
Json 序列化
把对象序列化成字符串,比如 JSON,利用字符串比较进行匹配:
|
|
但是,这种方式不适合多个参数的情况:
|
|
一旦改变属性声明的顺序,序列化匹配就会失效。
反射
反射匿名类型取出对应属性的值:
|
|
这种方式能够实现完全灵活地进行比较,以确定参数是否匹配。但如果有多个属性要匹配,则非常繁琐。