2016-10-12 2 views
0

Я пытаюсь включить модульное тестирование в проект Xamarin PCL.Служба зависимостей Null Исключение ссылки в модульном тестировании

Это то, что я в основном делаю:

класс Войти Страница:

public bool isUserRemembered() 
    { 
     return DependencyService.Get<IUserDefaults>().getUserRemembered(); 
    } 

    public void setRememberUser(bool check) 
    { 
     DependencyService.Get<IUserDefaults>().setUserRemembered(check); 
    } 

UnitTest класс (IOS):

[Test] 
    public void RememberKeyTrueTest() 
    { 
     LoginPage page = new LoginPage(); 
     bool isRemember = true; 

     page.setRememberUser(isRemember); 

     bool value = page.isUserRemembered(); 
     if (value) 
      Pass(); 
     else 
      Fail(); 
    } 

Я получаю нулевой ссылки Exception на этой линии: DependencyService.Get<IUserDefaults>().setUserRemembered(check) ,

Будет ли работать служба зависимостей с модульным тестированием? Или вокруг есть какая-то работа?

+1

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

+1

[Unit testing with Xamarin.Forms 'DependencyService] (http://arteksoftware.com/unit-testing-with-xamarin-forms-dependencyservice/) - это [только Google в любом месте] (https://www.google. co.uk/search?q=DependencyService+unit+tests) – stuartd

ответ

1

Когда я использую Injection Dependency в своем коде, я использую IoC (Inversion Of Control) для обработки создания зависимостей в моем производственном коде и вручную создаю зависимости в своих модульных тестах.

Моя основная причина в том, что это явное. Часто я буду использовать фреймворк Mocking для создания фальшивых экземпляров, поэтому мне не нужна дополнительная сложность.

Предложение по вашему тестируемому коду, вы заменили зависимость вашего класса на зависимость от вашего DependencyService. Я не говорю, что не используйте DependencyService, но вы можете передать зависимость своему конструктору класса. Затем ваш тест может проходить в поддельном экземпляре, а производственный код будет использовать DependencyService, чтобы получить IUserDefaults и передать его. Это упростит ваш класс.

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