0

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

我的映射将替换Value2person1.

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

是否可以从我的模拟中“返回”一个不同的 person1 ?如果可能的话,我该怎么做?

编辑

是的,我的问题是如何_mapper正确地模拟我并使用 NSubstitute “返回”不同的 person1 (通过 ref)。

person1 是一个引用对象,这意味着在实际实现中来自 person2 的 Value2 将替换 person1 中的 Value2。但在我的单元测试中,我未能模拟这种情况。

4

1 回答 1

1

如果不使用Map的结果参数,则可以在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);
于 2018-03-09T11:45:50.160 回答