当自动映射器映射到现有对象并使用 nsubstitute 时如何进行单元测试

How do I unittest when having an automapper map to existing object and using nsubstitute

我正在使用 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);

我的映射将替换 person1 中的 Value2

此后我使用 person1 修改后的值。

是否可以 "return" 与我的模拟对象不同的人1?如果可能的话,我该怎么做?

编辑

是的,我的问题是如何使用 NSubstitute 正确地模拟我的 _mapper 和 "return" 不同的人1(by ref)。

person1 是一个引用对象,这意味着在实际实现中,来自 person2 的 Value2 将替换 person1 中的 Value2。但是在我的单元测试中我没有模拟这个场景。

如果不使用 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);

或者您可以 return 从 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);