2013-03-01 3 views
1

Пожалуйста, посмотрите на следующий кодМодульное тестирование метод, который вызывает другой метод другого класса

int sum(int a, int b) 
{ 
    int x = memberInstance.xyz(a); // memberInstance is an object of another class 
    ..... 
    ..... 
} 

Скажем, известно также, что метод чисел хуг возвращает между 1-10. Теперь я хочу разработать метод единичного теста для метода sum, и я хотел бы заменить вызов метода memberInstance.xyz (a) на произвольное возвращаемое значение [любое значение между 1-10]. Пожалуйста, дайте мне знать, как я могу это достичь? Если возможно, укажите пример кода.

ответ

5

Вы должны использовать интерфейс к нему.

public interface IMemberInstance 
{ 
    int xyz {get;} 
} 

public class MemberInstance : IMemberInstance 
{ 
... // the real class's implementation + code here 
} 

public class MockMemberInstance : IMemberInstance 
{ 
    // the test class can return a test value 
    int xyz(int a) { return 10; } 
} 

Тогда в своем классе для тестирования (например, MyClass)

private IMemberInstance memberInstance; 

public MyClass(IMemberInstance memberInstance) 
{ 
    this.memberInstance = memberInstance; 
} 

int sum(int a, int b) 
{ 
    int x = memberInstance.xyz(a); // memberInstance is an object of another class 
    ..... 
    ..... 
} 

Сделать так, что вы можете передать в IMemberInstance класса для тестирования. Таким образом, вы можете поддельный его с тестовым классом (Mock реализации)

+0

Я уже разработал множество классов и экземпляры этих классов привыкают в другие классы. Согласно вашему решению, мне нужно разработать интерфейсы для всех классов, а также изменить код классов, которые фактически используют экземпляр других классов (необходимо иметь ссылку на интерфейс, а не использовать ссылку фактического класса). Есть ли другой способ решить проблему? –

+0

Не совсем ... Это в основном способ сделать это. Лучше всего помнить, когда вы разрабатываете, поэтому вам не нужно возвращаться и вносить изменения. Интерфейсы позволяют вам свободно связывать реализацию зависимостей для объектов, чтобы их можно было легко протестировать. – Alan

+0

Получил это. В будущем я попытаюсь развить этот фактор. Но как создать экземпляр memberInstance в методе тестирования в случае, если memberInstance является частным полем класса Container? –

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