Как мне правильно переместить вспомогательные методы модульного тестирования grails в отдельный файл?

У меня есть несколько часто используемых вспомогательных методов для модульных тестов, помещенных в отдельный файл. Идея состоит в том, чтобы, например, разрешить моему XYZTests.groovy вызывать TestHelper.getUserObject (), чтобы получить полностью инициализированный экземпляр User.

Теперь проблема в том, что существует springSecurityService.encodePassword (pw ) вызывается в beforeInsert () пользователя, что всегда дает сбой, так как нет макета для springSecurityService в TestHelper.groovy.

java.lang.NullPointerException: Cannot invoke method encodePassword() on null object

В User.groovy ]:

def beforeInsert() {
    // ...
    password = springSecurityService.encodePassword(pw)
    // ...
}

Примечание: я бы хотел избежать насмешек над в TestHelper.groovy, чтобы использовать его методы и в интеграционных тестах.

Несмотря на это, даже если ] Я пытаюсь вызвать mockFor () в любом месте TestHelper.groovy, я получаю MME:

No signature of method: static myproject.TestHelper.mockFor() is applicable for argument types: (java.lang.Class, java.lang.Boolean) values: [class grails.plugins.springsecurity.SpringSecurityService, true]
groovy.lang.MissingMethodException: No signature of method: static myproject.TestHelper.mockFor() is applicable for argument types: (java.lang.Class, java.lang.Boolean) values: [class grails.plugins.springsecurity.SpringSecurityService, true]
    at myproject.TestHelper.mockSpringSecurityService(TestHelper.groovy:59)
    at myproject.TestHelper$mockSpringSecurityService.callStatic(Unknown Source)
    at myproject.TestHelper.getUserObject(TestHelper.groovy:47)
    at myproject.TestHelper$getUserObject.call(Unknown Source)
    at myproject.UserTests.setUp(UserTests.groovy:26)

Примечание: если (is_array ($ v)) {$ a = $ v; } еще {$ a [] = $ v; } Как это можно сделать в большем количестве ...

У меня есть переменная $ v, которая может быть одной строкой или массивом строк
, и у меня есть код:

$a = array();
if (is_array($v)) {
    $a = $v;
} else {
    $a[] = $v;
}

Как это можно сделать более элегантно путь? (другими словами, как преобразовать переменную в массив)

34
задан tsds 24 August 2015 в 12:55
поделиться