2015-09-16 2 views
0

Iam в настоящее время пытается выполнить модульное тестирование приложения в android. Я использую Dagger 2 для DI. В настоящее время у меня есть класс под названием «ErrorChecker», который я использую для проверки правильности формата электронной почты и пароля определенной длины и т. Д.Лучшая практика для тестирования объекта в android. Должен ли я создавать экземпляр класса в тесте?

В моем классе ErrorChecker есть контекст, который я вставляю. Это в основном используется только для получения строкового ресурса с предупреждением о том, что введенное письмо не было в правильном формате. Id нравится иметь возможность вставлять контекст в версию класса ErrorChecker в моем тесте. Я не уверен, что это абсолютно необходимо? ниже мой тестовый класс.

@RunWith(RobolectricGradleTestRunner.class) 
@Config(constants = BuildConfig.class) 
public class ErrCheckerTest { 


private ErrorChecker errchecker; 

@Before 
public void setup() 
{ 
    errchecker = new ErrorChecker(); 
    errchecker.setCont(MyApplication.getInst()); 
} 



@Test 
public void validEmailTest() 
{ 
    //invalid emails 

    errchecker.setEmail("notvalidemail"); 
    assertFalse(errchecker.emailValid()); 
    errchecker.setEmail("jimm.***@yahoo.com.com"); 
    assertFalse(errchecker.emailValid()); 
    errchecker.setEmail(".*%&[email protected]"); 
    assertFalse(errchecker.emailValid()); 
    errchecker.setEmail(""); 
    assertFalse(errchecker.emailValid()); 
    errchecker.setEmail("[email protected]"); 
    assertFalse(errchecker.emailValid()); 


    // valid emails 

    errchecker.setEmail("[email protected]"); 
    assertTrue(errchecker.emailValid()); 
    errchecker.setEmail("[email protected]"); 
    assertTrue(errchecker.emailValid()); 
    errchecker.setEmail("[email protected]"); 
    assertTrue(errchecker.emailValid()); 
    errchecker.setEmail("[email protected]"); 
    assertTrue(errchecker.emailValid()); 
    errchecker.setEmail("[email protected]"); 
    assertTrue(errchecker.emailValid()); 

    } 
} 

По существу, я просто создаю экземпляр класса, а не вводя его. Я также сделал метод в своем классе ErrorChecker, чтобы установить контекст. Затем я передаю ему статический экземпляр MyApplication с помощью MyApplication.getInst(), который расширяет класс Application. Я думаю, что это способ Okay для создания моего класса ErrorChecker с контекстом, или я должен попытаться его вставить. Это потребует большого количества дополнительного шаблона кода, но, вероятно, будет выглядеть более чистым. Id нравится следовать лучшей практике, поэтому, если кто-нибудь скажет мне, что этот подход нарушает передовой опыт или может предложить другой способ создания класса ErrorChecker в моем тестовом идентификаторе, действительно оцените его!

ответ

0

Вам действительно нужно передать контекст в своем классе ErrorChecker? Я думаю, что ErrorChecker должен только проверять правильность ваших данных или нет. Ваше мнение должно нести ответственность за получение и отображение сообщения, если данные неверны.

+0

Да, ваше право. Я использую контекст во многих своих классах, чтобы установить сообщение об ошибке, как правило, в моем классе Model. Я пытаюсь сделать класс представления «немым», поэтому я стараюсь, чтобы он обрабатывал как можно меньше логики. поэтому я установил Error (который я получаю из ресурса String) в моей модели. Я мог бы изменить код, но тогда Iam обрабатывал логику без UI в представлении и нарушал бы MVP. Это мое мышление в любом случае, но я всегда готов к предложениям. –

+0

Кроме того, мои тесты находятся в другом пакете для моего основного, где все мои компоненты и т. Д. Прежде чем я не могу вложить свои Mocks в мои тесты, поскольку я не могу ссылаться на классы My Test в моем основном пакете. –

+0

Как вы вставляете контекст в ErrorChecker. Не могли бы вы вставить его в конструктор ErrorChecker, чтобы вы могли использовать макет контекста в своем тесте. –

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

  • Нет связанных вопросов^_^