Поблочное тестирование с ServiceLocator

Можно ли использовать Строковый Алгоритм Повышения? http://www.boost.org/doc/libs/1_35_0/doc/html/string_algo/usage.html#id1290573

erase_all(str, " "); 

5
задан zachary 15 October 2009 в 15:18
поделиться

3 ответа

В MSDN есть этот пример, который показывает , как реализовать шаблон локатора службы с Unity . По сути, вы должны передать объект локатора службы в качестве аргумента конструктора вашего класса. Это позволяет вам пройти MockUnityResolver , что позволит вам получить полный контроль над модульным тестом.

[TestMethod]
public void InitCallsRunOnNewsController()
{
    MockUnityResolver container = new MockUnityResolver();
    var controller = new MockNewsController();
    container.Bag.Add(typeof(INewsController), controller);
    var newsModule = new NewsModule(container);

    newsModule.Initialize();

    Assert.IsTrue(controller.RunCalled);
}
4
ответ дан 13 December 2019 в 22:11
поделиться

Вы могли бы использовать инъекцию бедняка. Создайте конструктор по умолчанию, который извлекает зависимости из локатора служб и перенаправляет эти зависимости «реальному» конструктору, который принимает их как параметры. Это позаботится о производственных ситуациях.

Затем при тестировании рассматриваемого класса передайте фиктивную / фиктивную версию зависимостей в «настоящий» конструктор, полностью обойдя конструктор по умолчанию.

4
ответ дан 13 December 2019 в 22:11
поделиться

Are you testing your core "DI integration" code? If not, your normal code should never (well, rarely) be interacting with your DI framework.

Normally your dependencies will be injected via constructor injection, and when testing, you can instead supply mock objects as those constructor dependencies. For example:

public class Foo {
    public Foo (IBar bar) {
        bar.Lift ();
    }
}

With the above code, you can simply mock IBar, and pass it to the Foo constructor.

1
ответ дан 13 December 2019 в 22:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: