当使用现有对象的autpper映射并使用nsubstitute时,如何进行单元测试

时间:2018-02-21 08:24:06

标签: automapper nsubstitute automapper-6

我正在使用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。但在我的单元测试中,我无法模拟这种情况。

1 个答案:

答案 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);
相关问题