2016-04-20 2 views
0

Я пытаюсь реализовать модульный тест для метода в моем классе. Как я могу издеваться над индексом базового класса в методе класса, который я тестирую? Ниже фрагмента кода следует дать четкое представление о моем требовании.Тестирование модуля с использованием Mock в MVC

public class MyClass:MyBase 
{ 
    public string returnString(string str1) 
    { 
    var xyz=base[str1]; 
    //My code to unit test is here 
    } 
} 

public class MyBase 
{ 
    public virtual string this[string str1] 
    { 
    return "prefix"+str1; 
    } 
} 

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

Sree.

+0

Может оказаться полезным включить в себя что-то издевательское каркас, который вы используете, и то, что вы пробовали в своих модульных тестах. – JCisar

ответ

0

Обычно не рекомендуется практиковать, но в этом случае «подходит»: издеваться над тестируемым классом. Конечно, в этом случае вы только издеваетесь над тем, что характерно для базового класса, а не переопределено каким-либо образом вашим потомком под тестом. Это гарантирует, что поведение базового класса высмеивается и, следовательно, под контролем тестов при тестировании методов потомка.

В вашем примере вы создадите макет MyClass, но только измажете унаследованный (MyBase) конструктор, тем самым убедившись, что все остальные методы запускаются «как закодированные», а затем утверждают против посмеянного экземпляра.

0

Я не вижу причины, чтобы заглушить ваш базовый класс, так как вы можете издеваться над тестируемым классом. Я покажу тебе.

Я добавил оператор возврата к returnString() метод, просто для утверждения, чтобы закончить тест:

public string returnString (string str1) 
{ 
    var xyz = base [str1]; 
    return xyz; 
} 

А теперь тест:

[TestMethod, Isolated] 
public void TestIndexerFake() 
{ 
    //Arrange 
    var MyClassFake = Isolate.Fake.AllInstances<MyClass>(Members.CallOriginal); 
    Isolate.WhenCalled(() => MyClassFake["test"]).WillReturn("fake!"); 

    //Act 
    MyClass target = new MyClass(); 
    var result = target.returnString("test"); 

    //Assert 
    Assert.AreEqual("fake!", result); 
} 

Я использую Typemock Isolator и MSTest.

Надеюсь, это поможет!

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