1

我有带有以下代码的控制器:

def profile = Profile.findByProfileURL(params.profileURL)

和这样的单元测试:

@TestMixin(GrailsUnitTestMixin)
@TestFor(ProfileController)
@Mock([User])
class ProfileControllerTests {

    def void testIndex() {
        mockDomain(User, [[firstname: 'Niko',...]])

        controller.params.profileURL = 'niko-klansek'

        controller.index()

        ...
    }

}

当我运行测试时,控制器中出现以下异常,指的是:

No signature of method: sportboard.core.profile.Profile.methodMissing() is applicable for argument types: () values: []

那么我在测试中设置的参数值 profileURL 从控制器中看不到吗?如何为控制器设置参数以使其可见?

4

1 回答 1

1

异常是神秘的,但它表示您的Profile域类没有被模拟。您应该将其添加到@Mock注释中。此外,@TestMixin可以在此处省略,您不应该mockDomain直接在测试中使用。只需保存此用户实例。总而言之,它应该是这样的:

@TestFor(ProfileController)
@Mock([User, Profile])
class ProfileControllerTests {
    def void testIndex() {
        def user = new User(firstName: 'Niko').save()

        controller.params.profileURL = 'niko-klansek'
        ...
    }
}
于 2013-01-30T12:51:21.387 回答