На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Hsilgos
  
> Android & JUnit
    Я с тестами мало дела имел, но почему-то мне кажется, что в NUnit такого не было.

    Вобщем. Сделал я тест. Наследник от AndroidTestCase, сдела у этого класса приватные поля и собственно методы которые сами тесты выполняют. В первом методе промежуточные результаты присваиваю этим полям, что бы использовать в следующих тестах и не выполнять ту же работу два раза... А болт. В следующих тестах эти поля null!?

    Вот пример:

    ExpandedWrap disabled
      package com.ai.pref.data.test;
       
      import java.util.ArrayList;
      import java.util.List;
       
      import android.test.AndroidTestCase;
       
      public class SimpleTest extends AndroidTestCase {
          private ArrayList<Item> _etalon;
              private Object _someResult;
       
          @Override
          protected void setUp() throws Exception {
              super.setUp();
              
              _etalon = createEtalon();
          }
       
          @Override
          protected void tearDown() throws Exception {
              super.tearDown();
          }
       
          public void test1() throws Throwable{
                      _someResult = new SomeResult();
              assertFalse("Test1 failed", true);
          }
       
          public void test2 throws Throwable{
              assertTrue("Test2 failed", useSomeResult(_someResult));
          }
          
          private ArrayList<Item> createEtalon {
       
              return new ArrayList<Item>(32);
          }
      }



    Т.е. на примере получается, что _someResult у каждого метода test своя, а _etalon у всех общий... Ладно, думаю, поставил в каждый метод бреак поинты, добавил для чистоты эксперемента tearDown.

    Запускаю отладку и вижу, что вместо двух тестов выполняется три. Первый какой-то testAndroidTestCaseSetupProperly.

    Что это такое и зачем оно нужно???

    Самое главное, что бреак пойнты срабатывают так, что получается, что для каждого метода теста создается новый экземпляр класса SomeTest. Включая самый мервый метод, который вообще непонятно откуда взялся.

    Т.е. получается, что на первый, непонятный метод выполняется setUp и tearDown, а на каждый мой метод выполняется SetUp, мой метод test1 или test2 соответственно, а потом tearDown.

    В инете поискал, но че-то ничего не нашел...

    Кто-нибудь, объясните, что за странный метод такой? Почему на каждый тест создается свой экземпляр класса теста? Разве так должно быть? И если так должно быть, то в чем смысл? А если так быть не должно, то как правильно делать?

    Как мне казалось, весь смысл методв setUp и tearDown, что они выполняются один раз, настраивая среду для выполнения группы тестов, которые находятся в одном классе. Например, там, коннекшены открывают и закрывают, моки создают и т.д. и т.п.
    Сообщение отредактировано: Felan -
      Во-первых, андроидовские тесты предназначены в первую очередь для тестирования интерфейса. Ядро программы можно проверять и с помощью обычных JUnit-тестов.
      Во-вторых, ничто не гарантирует последовательное выполнение тестов. Если нужно протестировать один и тот же класс или связанные методы, то почему нельзя их включить в один и тот же тест-метод?
      В-третьих, таки да, setUp() выполняется перед каждым тестом отдельно, вполне вероятно, что и класс может для этого заново создаваться. Этот метод просто дает возможность вынести общий код инициализации перед тестом в отдельный метод. И это имеет смысл, так как тесты могут выполняться непоследовательно, выборочно - в самом интерфейсе JUnit.

      JUnit является пра-родителем NUnit, так что, вероятно, там поведение аналогичное.
      Сообщение отредактировано: [S]mike -
        Понятно.
        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
        0 пользователей:


        Рейтинг@Mail.ru
        [ Script execution time: 0,0243 ]   [ 15 queries used ]   [ Generated: 27.04.24, 12:27 GMT ]