2016-12-20 3 views
0

Я хочу MOQ вызов службы в методе, для которого я пишу методы тестирования единицы.Как выполнить вызов службы в методе, возвращающем объект абстрактного класса?

Например:

public void MethodUnderTest(data) 
{ 
    XYZService.ServiceMethod(data); 
} 

Указанный выше способ службы возвращает объект абстрактного класса (Допустим CLASSA). т.е.

public ClassA ServiceMethod(ClassA data) 
    { 
     //code 
    } 


public abstract class ClassA 
    { 
     //Code 
    } 

Теперь, если я пишу MOq для вышеуказанного испытания в тестовом классе, как:

_xyzService.setup(x => x.ServiceMethod(data)).Returns(?);

Если я пишу новый CLASSA() вместо ?, я не должен делать это как класс абстрактно!

Итак, что мне помещать в Return?

+2

Если вы вернете все, что происходит от 'ClassA', это будет правильный подход. Просто создайте фиктивный 'public class ClassAB: ClassA'. – Fabio

+1

@Fabio Цель mocking-framework заключается в том, чтобы * не * создавать все эти производные самостоятельно, а полагаться на фреймворк для создания экземпляров этих типов. – HimBromBeere

+0

@HimBromBeere, мой комментарий состоял в том, что OP нужно вернуть только класс, полученный из класса ClassA. Как он создаст этот экземпляр, он не будет измеряться с точки зрения теста. Извините, я не пытался различить важность насмешливой рамки :) – Fabio

ответ

1

You're не создает макет экземпляра:

var mock = new Mock<ClassA>(); 
_xyzService.Setup(x => x.ServiceMethod(data)).Returns(mock.Object); 

new Mock просто создает класс, производный от ClassA и возвращает экземпляр этого класса.

+0

получение синтаксической ошибки: – Vishwas

+0

@ Vishwas Eeeehm вы можете уточнить? Где? – HimBromBeere

+1

@Vishwas - не использовать 'copy-paste' :) – Fabio

Смежные вопросы