在测试grails服务时创建域对象

时间:2013-05-05 11:22:39

标签: unit-testing grails mocking

我正在尝试创建用于测试我的grails服务的单元测试。我有以下测试

@TestFor(ActivityProcessorService)

@Mock([ActivityProcessorService, Activity])
class ActivityProcessorServiceTests extends GrailsUnitTestCase{
void setUp() {

}

void tearDown() {
    // Tear down logic here
}

void testGenerateDescription() {

    def activity = new Activity(
        //new activity details
        )

   def service = mockFor(ActivityProcessorService)
   def description = service.generateDescription(activity)

   assert description == "something..."
 }
}

我的问题是在创建Activity对象并填充所有必填字段时,需要我创建其他几个对象,例如UserTask和其他一些对象,其中对象可能非常大,这会产生需要创建对象等的效果。

有没有办法可以创建Activity对象,但省略了TaskUser和其他大型对象等完全填充对象的创建?

E.g

def activity = new Activity(
        task: new Task(),
        user: new User(),
        ... and so on
        )

其中任务和用户被模拟,而不是创建完整的对象,如

def activity = new Activity(
        task: new Task(
                title : "task title"
                description : "task description"
                ... and so on
            ),
        user: new User(
                firstName : "john",
                lastName : "smith",
                ... and so on
            ),
        ... and so on
        )

因为这将为创建这么小而简单的测试带来相当大的开销。

1 个答案:

答案 0 :(得分:1)

请参阅此release notes,您必须在TaskUser(build-test-data-plugin:2.0)中手动指定@Mock@Build。 5)