我正在使用Automapper 6.2.1并删除了所有静态,而是注入了IMapper
。
我正在使用NSubstitute进行嘲弄。
我有一些代码可以映射两个现有对象。
public class Person1 {
public string Value1 { get; set; }
public string Value2 { get; set; }
}
public class Person2 {
public string Value2 { get; set; }
}
...
_mapper.Map(person2, person1);
我的地图将取代Value2
中的person1
。
此后我使用person1
修改后的值。
是否可以"返回"我的模拟中的另一个人?如果可能的话,我怎么能这样做?
修改
是的,我的问题是如何正确地模仿我的_mapper
并且"返回"使用NSubstitute的另一个人1( by ref )。
person1是一个引用对象,意味着在实际实现中,person2中的Value2将替换person1中的Value2。但在我的单元测试中,我无法模拟这种情况。
答案 0 :(得分:1)
如果您不使用 Map 的结果参数(它将为null),您可以修改 Do 方法中的Person1参数
_mapper
.When(x => x.Map(person2, person1))
.Do(x =>
{
var person1Arg = x.Arg<Person1>();
person1Arg.Value1 = "value-1";
person1Arg.Value2 = "value-2";
});
//map and use person1
_mapper.Map(person2, person1);
或者您可以从 Map 返回新的Person1对象,但在这种情况下,原始person1未被修改
_mapper.Map(person2, person1)
.Returns(new Person1
{
Value1 = "value-1",
Value2 = "value-2"
});
//then map and use resultPerson1 instead of person1
var resultPerson1 = _mapper.Map(person2, person1);