Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / JUnit тест / 18 сообщений из 18, страница 1 из 1
28.05.2013, 21:42:56
    #38277519
Vitasya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JUnit тест
Посмотрите пожалуйста почему не проходится тест?? может чего-то недопонял?(

package tests;

import java.io.IOException;

import junit.framework.TestCase;

import org.easymock.EasyMock;

import vit.proj.camelcase.CamelCaseInterface;

public class CamelCaseTest extends TestCase{

public void testccmethod() throws IOException {

StringBuffer expected = new StringBuffer("SomeWord");
CamelCaseInterface ccinterface = EasyMock.createMock(CamelCaseInterface.class);
EasyMock.expect(ccinterface.ccmethod()).andReturn("some word");
EasyMock.replay(ccinterface);
StringBuffer actual = new StringBuffer();
String word = "some word";
actual.append(word.substring(0, 1).toUpperCase() + word.substring(1).toLowerCase());
assertEquals(expected,actual);
}
}

и рабочий вполне код:

package vit.proj.camelcase;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class CamelCase {
public static String word;
public static void main(String[] args) {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
Pattern p = Pattern.compile("[a-zA-Z]+");
Matcher m = p.matcher(br.readLine());

while (m.find()) {
word = m.group();
new CamelCase().ccmethod();
}

} catch (Exception e) {
System.err.println("ошибка");
}
}

public String ccmethod() {

StringBuffer result = new StringBuffer();
result.append(word.substring(0, 1).toUpperCase() + word.substring(1).toLowerCase());
System.out.print(result.toString());
return null;
}

}
...
Рейтинг: 0 / 0
28.05.2013, 21:57:45
    #38277530
Sergunka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JUnit тест
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
package tests;

import java.io.IOException;

import junit.framework.TestCase;

import org.easymock.EasyMock;

import vit.proj.camelcase.CamelCaseInterface;

public class CamelCaseTest extends TestCase {

    public void testccmethod() throws IOException {

        StringBuffer expected = new StringBuffer("SomeWord");
        CamelCaseInterface ccinterface = EasyMock.createMock(CamelCaseInterface.class);
        EasyMock.expect(ccinterface.ccmethod()).andReturn("some word");
        EasyMock.replay(ccinterface);
        StringBuffer actual = new StringBuffer();
        String word = "some word";
        actual.append(word.substring(0, 1).toUpperCase() + word.substring(1).toLowerCase());
        assertEquals(expected, actual);
    }
}

и рабочий
вполне код:

        package vit.proj.camelcase;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class CamelCase {
    public static String word;

    public static void main(String[] args) {
        try {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            Pattern p = Pattern.compile("[a-zA-Z]+");
            Matcher m = p.matcher(br.readLine());

            while (m.find()) {
                word = m.group();
                new CamelCase().ccmethod();
            }

        } catch (Exception e) {
            System.err.println("ошибка");
        }
    }

    public String ccmethod() {

        StringBuffer result = new StringBuffer();
        result.append(word.substring(0, 1).toUpperCase() + word.substring(1).toLowerCase());
        System.out.print(result.toString());
        return null;
    }

}
...
Рейтинг: 0 / 0
28.05.2013, 22:17:48
    #38277547
Vitasya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JUnit тест
Sergunka,

??
...
Рейтинг: 0 / 0
28.05.2013, 22:30:04
    #38277558
Vitasya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JUnit тест
продублировал
...
Рейтинг: 0 / 0
29.05.2013, 00:59:22
    #38277685
Sergunka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JUnit тест
Vitasya,

к сожалению у меня нет времени переписать целиком код. Вот примерно то, что очевидно стоит переделать.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class CamelCase {

    public CamelCase() {
    }


    public CamelCase(final String word) {
        this.word = word;
    }

    private static String word;

    public static void main(String[] args) {
        try {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            Pattern p = Pattern.compile("[a-zA-Z]+");
            Matcher m = p.matcher(br.readLine());

            while (m.find()) {
                word = m.group();
                word = new CamelCase().ccmethod(word);
            }

        } catch (Exception e) {
            System.err.println("ошибка");
        }
    }

    public String ccmethod(final String s) {

        StringBuffer result = new StringBuffer();
        result.append(s.substring(0, 1).toUpperCase() + s.substring(1).toLowerCase());
        System.out.print(result.toString());
        return result.toString();
    }

}



Если Вы хотите протестировать предложение т.е. строку содержащею несколько слов, то Вам надо мокнуть последовательно три класса

Код: java
1.
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));



System.in
InputStreamReader
BufferedReader

Это должно быть легко... увы я ИзиМок не знаю, сходу сложно написать.

а так метод юнит тест будет выглядить так примерно

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
import org.junit.Test;

import java.io.IOException;

import static junit.framework.Assert.assertTrue;

public class CamelCaseTest {
    @Test()
    public void testccmethod() throws IOException {

        final String word = "word";

        String expected = "Word";
        CamelCase cc = new CamelCase(word);
        String result = cc.ccmethod(word).trim();

        assertTrue(expected.equals(result));
    }
}
...
Рейтинг: 0 / 0
29.05.2013, 10:28:14
    #38277931
Vitasya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JUnit тест
Sergunka,

спасибо..таки конструктор обязательно надо добавлять в код?
...
Рейтинг: 0 / 0
29.05.2013, 11:21:08
    #38278102
Vitasya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JUnit тест
Sergunka,
а почему не проходиться, если в String word подставить такие значения? ведь если мы запускаем код и вводим в консоль hi world, она выдаст нам HiWorld

import org.junit.Test;

import java.io.IOException;

import static junit.framework.Assert.assertTrue;

public class CamelCaseTest {
@Test()
public void testccmethod() throws IOException {

final String word = "hi world";

String expected = "HiWorld";
CamelCase cc = new CamelCase(word);
String actual = cc.ccmethod(word);

assertTrue(expected.equals(actual));
}
}
...
Рейтинг: 0 / 0
29.05.2013, 16:53:23
    #38278885
Vitasya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JUnit тест
Sergunka,

вопрос отменяется, разобрался!
...
Рейтинг: 0 / 0
29.05.2013, 19:46:36
    #38279210
Sergunka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JUnit тест
VitasyaSergunka,

спасибо..таки конструктор обязательно надо добавлять в код?

Виталий,

код надо просто полностью переписать, что я сегодня и сделаю если время позволит на работе этим заниматься.

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

Хотя это более менее очевидно - ввести предложение с консоли и сжать пробелы между словами. Все слова написать с заглавной буквы.
...
Рейтинг: 0 / 0
29.05.2013, 21:27:18
    #38279308
Sergunka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JUnit тест
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
import java.io.IOException;
import java.util.regex.Matcher;

public interface CamelCaseInterface {
    String ccmethod(String word);
    String getWord();
    Matcher parse() throws IOException;
}



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class CamelCase implements CamelCaseInterface {
    private  String word;

    public CamelCase() {
    }

    public String getWord() {
        return word;
    }

    public void setWord(String word) {
        this.word = word;
    }

    public CamelCase(final String wordS) {
        this.word = wordS;
    }

    public Matcher parse(String word) throws IOException {
        Pattern p = Pattern.compile("[a-zA-Z]+");
        return p.matcher(word);
    }

    public Matcher parse() throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        Pattern p = Pattern.compile("[a-zA-Z]+");
        return p.matcher(br.readLine());
    }

    public String getAllWords(Matcher matcher) {
        String allWork = "";

            while (matcher.find()) {
                String work = matcher.group();
                allWork += ccmethod(work);
            }
        return allWork;
    }

    public String ccmethod(final String s) {

        StringBuffer result = new StringBuffer();
        result.append(s.substring(0, 1).toUpperCase() + s.substring(1).toLowerCase());
        return result.toString();
    }

    public static void main(String[] args) {
        try {
            CamelCase cc = new CamelCase();
            cc.setWord(cc.getAllWords(cc.parse()));
            System.out.println("Words:" + cc.getWord());

        } catch (Exception e) {
            System.err.println("ошибка");
        }
    }

}




Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
import org.easymock.EasyMock;
import org.junit.Test;

import java.io.IOException;
import java.util.regex.Matcher;

import static junit.framework.Assert.assertTrue;

public class CamelCaseTest {
    @Test()
    public void testccmethod() throws IOException {

        final String word = "word";

        String expected = "Word";
        CamelCase cc = new CamelCase(word);
        String result = cc.ccmethod(word).trim();

        assertTrue(expected.toString().equals(result));
    }

    @Test()
    public void testParse() throws IOException {

        final String word = "test word";

        CamelCase cc = new CamelCase();

        CamelCaseInterface ccinterface = EasyMock.createMock(CamelCaseInterface.class);
        EasyMock.expect(ccinterface.parse()).andReturn(cc.parse("test word"));
        EasyMock.replay(ccinterface);

        Matcher s = ccinterface.parse();
        cc.setWord(cc.getAllWords(s));

        assertTrue(cc.getWord().equals("TestWord"));
    }
}



Maven
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.8.1</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.easymock</groupId>
            <artifactId>easymock</artifactId>
            <version>2.5</version>
        </dependency>

    </dependencies>



Примерно должно выглядеть так как я сдезайнил, хотя как говорится нет предела совершенству. На мой взгляд лучше сразу использовать Mockito здесь хорошая объяснялка http://code.google.com/p/mockito/wiki/MockitoVSEasyMock

Уж больно езимок глюковатый я даже не уверен, что мокнул по всем правилам :)

Удачи
...
Рейтинг: 0 / 0
31.05.2013, 12:50:37
    #38281453
Vitasya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JUnit тест
Sergunka,

Спасибо большое!!
...
Рейтинг: 0 / 0
31.05.2013, 22:10:00
    #38282105
Sergunka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JUnit тест
Vitasya,

Я тут походу сделал некоторые полезные изменения. Дело в том, что при инициализации вашего класса может возникнуть прерывание рекомендуется такие вещи обходить специальным методом init() с ошибкой прерывания и его последующей обрабокой не в теле самого метода, а за его пределами.

Этот момент очень существенный пожалуйста разберитесь в нем раз и на всегда.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
package com.test;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 *  Test.
 */
public class CamelCase implements CamelCaseInterface {

     private Pattern p = Pattern.compile("[a-zA-Z]+");


    public CamelCase() {
    }

    public CamelCase(final String wordS) {
        this.word = wordS;
    }

    public void init(final String words) throws IOException {
          setWord(getAllWords(parse(words)));
    }

    public void init() throws IOException {
        setWord(getAllWords(parse()));
    }

    private String word;

    public void setWord(final String word) {
        this.word = word;
    }

    public String getWord() {
        return word;
    }

    public Matcher parse(final String word) throws IOException {
        return this.p.matcher(word);
    }

    public Matcher parse() throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        return this.p.matcher(br.readLine());
    }

    public String getAllWords(final Matcher matcher) {
        String allWork = "";

            while (matcher.find()) {
                String work = matcher.group();
                allWork += ccmethod(work);
            }
        return allWork;
    }

    public String ccmethod(final String s) {

        StringBuffer result = new StringBuffer();
        result.append(s.substring(0, 1).toUpperCase() + s.substring(1).toLowerCase());
        return result.toString();
    }

    public static void main(final String[] args) {
        try {
            CamelCase cc = new CamelCase();
            cc.init();
            System.out.println("Горбатое слово:" +  cc.getWord());

        } catch (Exception e) {
            System.err.println("ошибка");
        }
    }

}



Второй момент с таким дезайном нам не нужен мок так как метод parse() сам благополучно мокает сам себе только подставь значение строки parse( String)

В общем с моком разберитесь на каком нибудь другом примере здесь он не нужен.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
package com.test;

import org.junit.Test;
import java.io.IOException;
import static junit.framework.Assert.assertTrue;

public class CamelCaseTest01 {

     @Test()
    public void testParse() throws IOException {
         final String word = "test word";

         CamelCase cc = new CamelCase();
         cc.setWord(cc.getAllWords(cc.parse("test word")));

         assertTrue(cc.getWord().equals("TestWord"));

         CamelCase ccW = new CamelCase();
         ccW.init(word);

         assertTrue(ccW.getWord().equals("TestWord"));
    }
}
...
Рейтинг: 0 / 0
02.06.2013, 19:58:25
    #38282966
Vitasya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JUnit тест
Sergunka,

огромная вам благодарность за заботу, буду разбирать сейчас..не думал что ещё какой то ответ поступит
...
Рейтинг: 0 / 0
07.06.2013, 12:32:38
    #38290006
Vitasya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JUnit тест
Sergunka,
а я ещё хотел спросить зачем там везде нужны слово final и private ?
...
Рейтинг: 0 / 0
07.06.2013, 15:10:59
    #38290434
Vitasya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JUnit тест
Sergunka,

и можно было вообще это делать без геттеров и сеттеров?
...
Рейтинг: 0 / 0
07.06.2013, 20:00:57
    #38290991
Sergunka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JUnit тест
VitasyaSergunka,

а я ещё хотел спросить зачем там везде нужны слово final и private ?
и можно было вообще это делать без геттеров и сеттеров?

Это связано в первую очередь с уровнем понимания проблемы. Ограничивая скоп (видимость) переменной и требуя final от параметра говорит скорее о том, что чел использует плагин -- checkStyle и понимает, что это базовые требования дизайна при совместной разработке.

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

Внимательно почитайте требования ООП - инкапсуляцию и полиморфизм ответ на Ваши вопросы лежит в базе ООП и особенности языка Java.

Установите плагин checkStyle и будет Вам счастье в JI проверка стиля стоит на автомате

Удачи

Вот мой набор правил я прикрепил -- берите пользуйтесь
...
Рейтинг: 0 / 0
09.06.2013, 18:51:10
    #38291786
Vitasya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JUnit тест
Sergunka,

ок,а вот ещё такой вопрос волнует - можно написать тесты к такому коду camelcase с той же идеей, не переделывая его никак, не усложняя,будет это корректно вцелом?у меня не получилось лично..

import java.util.regex.*;
import java.io.*;

public class Camel_Case {
public static void main(String[] args) {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
Pattern p = Pattern.compile("[a-zA-Z]+");
Matcher m = p.matcher(br.readLine());
StringBuffer result = new StringBuffer();
String word;
while (m.find()) {
word = m.group();
result.append(word.substring(0, 1).toUpperCase() + word.substring(1).toLowerCase());
}
System.out.println(result.toString());
} catch (Exception e) {
System.err.println("An error occured while reading input string.");
}
}
}
...
Рейтинг: 0 / 0
13.06.2013, 00:41:46
    #38295529
Sergunka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JUnit тест
VitasyaSergunka,

ок,а вот ещё такой вопрос волнует - можно написать тесты к такому коду camelcase с той же идеей, не переделывая его никак, не усложняя,будет это корректно вцелом?у меня не получилось лично..

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
import java.util.regex.*;
import java.io.*;

	public class Camel_Case {
	    public static void main(String[] args) {
	      try {
	        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	        Pattern p = Pattern.compile("[a-zA-Z]+");
	        Matcher m = p.matcher(br.readLine());
	        StringBuffer result = new StringBuffer();
	        String word;
	        while (m.find()) {
	            word = m.group();
	            result.append(word.substring(0, 1).toUpperCase() + word.substring(1).toLowerCase());
	        }
	        System.out.println(result.toString());
	      } catch (Exception e) {
	        System.err.println("An error occured while reading input string.");
	      }
	    }
	}



Это нельзя сделать по определению.
http://ru.wikipedia.org/wiki/Модульное_тестирование

Никто не пишет тесты для main метода. Вы должны написать некую функциональность для класса - его поля и методы на формальном уровне для того чтоб начать тестировать класс.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / JUnit тест / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]