2013-09-01 3 views
0

У меня есть единичный тест, который я пытаюсь получить для подтверждения.validate() Mock Constraint Testing in Grails

В принципе, когда я звоню badMockedSecureFile.validate(), это не делает то, что я ожидаю, и это не дает подтверждения для двух полей: encryptedFileName и encryptedFileData.

Когда я нарушаю отладчик, я просто получаю значение null для badMockedSecureFile.errors в последующем утверждении. Вот мои два файла:

Любой вход был бы оценен. Я не мог найти точно такой же вопрос. Я использую grails 2.2.4 с Oracle JDK 1.7.0_25 если это имеет значение.

EDIT: Я просто хотел отметить, что я удалил вызов mockForConstraintTests и, похоже, сейчас работает. У меня такое чувство, что я не RTFM где-то, и это поведение изменилось в модульном тестировании, или что-то еще происходит?

SecureFile.groovy

class SecureFile implements Serializable { 

    /** 
    * An unencrypted version of the file name. This file name is unencrypted 
    * when the appropriate password and key combo is used and it is never 
    * persisted to the database for security (see transients below). 
    */ 
    String fileName 

    /** 
    * Unencrypted version of the file data. Never persisted to the 
    * database for security (see transients below). 
    */ 
    byte[] fileData 

    String encryptedFileName 
    byte[] encryptedFileData 
    Date dateAdded 
    Date dateUpdated 
    Date dateDeleted 

    static constraints = { 
     encryptedFileName(nullable: false, blank: false) 
     encryptedFileData(nullable: false) 
    } 

    static transients = ["fileName", "fileData"] 

    static belongsTo = [user: User] 
} 

SecureFileTests.groovy

import static org.junit.Assert.* 
import grails.test.mixin.* 
import grails.test.mixin.support.* 

import org.junit.* 

/** 
* See the API for {@link grails.test.mixin.support.GrailsUnitTestMixin} for usage instructions 
*/ 
@TestFor(SecureFile) 
class SecureFileTests { 

    static final String SAMPLE_PDF_FILE = "fileEncryptionTestSample.pdf" 

    void testConstraints() { 
     def samplePdfFile = new FileInputStream(SAMPLE_PDF_FILE) 

     // Not really encrypted for this mock. 
     def mockedSecureFile = new SecureFile(
       encryptedFileName: "--Not-Really-Encrypted--", 
       encryptedFileData: samplePdfFile.getBytes() 
       ) 
     mockForConstraintsTests(SecureFile, [mockedSecureFile]) 

     // Validation should fail if both properties are null. 
     def badMockedSecureFile = new SecureFile() 

     assert !badMockedSecureFile.validate() 
     assert "nullable" == badMockedSecureFile.errors["encryptedFileName"].code 
     assert "nullable" == badMockedSecureFile.errors["encryptedFileData"].code 
    } 
} 
+0

Я просто хотел прослушивать и отметить, что я удалил вызов 'mockForConstraintTests', и теперь он работает. У меня такое чувство, что я не RTFM где-то, и это поведение изменилось в модульном тестировании, или что-то еще происходит? –

ответ

0

Удалить код из badMockedSecureFile.errors [ "encryptedFileName"]. Код.

Вы получите то, что ожидали.

mockForConstraintsTests(SecureFile) 

// Validation should fail if both properties are null. 
def badMockedSecureFile = new SecureFile() 

assert !badMockedSecureFile.validate() 
assert "nullable" == badMockedSecureFile.errors["encryptedFileName"] 
assert "nullable" == badMockedSecureFile.errors["encryptedFileData"] 
+0

Подождите, что? Почему я должен создать экземпляр класса 'MyTest' вместо' SecureFile'? Также я добавил, что я удалил вызов функции 'mockForConstraintsTests', и теперь он работает. Поэтому я думаю, что мой вопрос действительно должен быть отредактирован. –

+0

Извините Томас. Класс MyTest, используемый мной, чтобы проверить себя. Я не перешел на SecureFile. Теперь посмотрим. Попробуйте это сейчас. Он будет работать. Я думаю, что mockForConstraints нужно ставить для оценки ограничений. – Visme

+0

Нет кубиков. Мне нужно удалить строку 'mockForConstraintsTest'. Это делается автоматически с Grails 2.2.4? Он отлично работает в UnitTest для класса домена, если я просто не называю 'mockForConstraintsTest()'. К сожалению, в документации это не показано. –