Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите пожалуйста с Unit тестом 
V
    Опции темы
Illdisposed
Дата 19.4.2012, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 10.3.2012

Репутация: нет
Всего: нет



Здравствуйте.
Не понимаю как тестировать объект предметной области связанные отношением:
Допустим у меня есть класс пользователя:
Код

package com.test

class User {

    String userId
    String password

    Date dateCreated
    Profile profile

    String toString() {
        "${userId} (${id})"
    }

    static constraints = {
        userId(size: 3..20, unique: true)
        password(size: 6..16, validator: { passwd, user ->
            passwd != user.userId
        })
        profile(nullable: true)
        shops(nullable: true)
        articles(nullable: true)
    }

    static hasMany = [ articles : Article, following : User ]
    static mapping = {
        profile lazy: false
        articles sort: 'dateCreated'
    }
}

Есть класс статьи:
Код

package com.test

class Article {

    String title
    String introText
    String fullText

    Date dateCreated
    Date lastUpdated

    static constraints = {
        title(size: 3..20)
        introText(nullable:true)
        fullText(nullable:true)
    }
    static mapping = {
        introText type: 'text'
        fullText type: 'text'
    }

    static belongsTo = [ user : User ]
}

А вот юнит тест статьи:
Код

package com.fancylucy



import grails.test.mixin.*
import org.junit.*

@TestFor(Article)
class ArticleUnitTests {

    void testConstraint() {
        def existingArticle = new Article(title: "Die Alone")
        mockForConstraintsTests(Article, [existingArticle])

        def testArticle = new Article()
        assert !testArticle.validate()
        assert "nullable" == testArticle.errors["title"]

        testArticle = new Article(title: "O")
        assert !testArticle.validate()
        assert "size" == testArticle.errors["title"]

        testArticle = new Article(title: "I'am dead again")
        assert testArticle.validate()
    }
}

Понятно что я не понимаю как это делается, только найти пока не выходит. Роюсь в доках, но что-то пока безрезультатно.

Это сообщение отредактировал(а) Illdisposed - 20.4.2012, 08:40
PM MAIL   Вверх
Laen8
Дата 23.4.2012, 16:46 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 23.4.2012

Репутация: 1
Всего: 1



Я попробовал воспроизвести ситуацию, вот что получилось:
1) в тесте некорректный пакет (может быть индуцировано в процессе постинга)
2) не хватает класса Profile (аналогично, у себя создал класс com.test.Profile)
кстати, на ссылку profile можно бы навесить hasOne или unique
3) в User есть constraint на shops, а самого поля нет, закомментировал
4) в заголовке теста я написал 
Код

@TestFor(Article)
@Mock([User])

5) 
Код

testArticle = new Article(title: "I'am dead again", user: new User())


Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  test1.rar 21,52 Kb
PM MAIL   Вверх
Illdisposed
Дата 25.4.2012, 08:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 10.3.2012

Репутация: нет
Всего: нет



Laen8, очень благодарен за помощь! Действительно есть у меня там ошибки... простите меня уж за это, честно сказать не думал что-то кто-то попробует это воспроизвести.
Скажите пожалуйста, а аннотации @Mock([User]) обязательно нужно передавать список? Как-то, из документации это трудно понять.
PM MAIL   Вверх
Laen8
Дата 25.4.2012, 09:06 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 23.4.2012

Репутация: 1
Всего: 1



В Mock можно передавать как одно значение, так и список. 

Javadoc часто действительно не полный - конкретно этот момент можно косвенно понять из http://grails.org/doc/latest/guide/testing.html, но иногда проще посмотреть в коде https://github.com/grails/grails-core/blob/...sformation.java.

Еще стоит сказать, что на русскоязычных форумах активность довольно низкая; я, например, это сообщение нашел случайно. Получить ответ на вопрос быстрее обычно можно в grails user mailing list
PM MAIL   Вверх
Illdisposed
Дата 25.4.2012, 20:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 10.3.2012

Репутация: нет
Всего: нет



Laen8, Спасибо! Я догадался что Вы случайно увидели мой пост. Удивительно, что Вы не прошли мимо. Еще раз большое спасибо за помощь и советы.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Groovy & Grails | Следующая тема »


 




[ Время генерации скрипта: 0.1206 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.