2017-09-24 8 views
0

J'ai les lignes de code suivantes qui créent un StreamBuilder pour moi.Test Bean IO Stream Builder Unit utilisant spock

@Override 
protected StreamBuilder getStreamBuilder() { 
    return new StreamBuilder(BEAN_IO_STREAM_NAME) 
     .format(FILE_FORMAT) 
     .addRecord(FileHeader.class) 
     .addRecord(Records.class); 
} 

Maintenant dans le cadre de tests unitaires, comment puis-je tester cette méthode en utilisant la spécification Spock?

Voici mon test de Spock:

def "Get Stream Builder"() 
    given: 
    StreamBuilder streamBuilder = new StreamBuilder("STREAM").format("fixedlength").addRecord(Header.class).addRecord(Records.class) 

    expect: 
    streamBuilder == fileProcessor.streamBuilder 

} 

Sortie:

Expected :config: StreamConfig[name=STREAM] 
Actual :config: StreamConfig[name=STREAM] 
+0

Qu'aimeriez-vous tester exactement? – Opal

+0

L'invocation de la méthode getStreamBuilder() –

+0

Essayez donc de fournir une esquisse de votre scénario de test. Peut-être dans spock, ne peut pas compiler. – Opal

Répondre

0

de == utilise Spock equals donc si streamBuilder.equals(fileProcessor.streamBuilder) est faux cela ne passera pas.

En outre, ce test semble tester la mauvaise chose. Testez le résultat pas à chaque étape du chemin. Sinon, vous obtenez un test rigide qui se casse pour chaque petit refactoring.

0

Pour avoir réussi votre test, vous devez implémenter equals() de StreamBuilder.

Si vous n'avez pas ou ne veulent pas mettre en œuvre la equals() autre façon de vérifier la configuration est de vérifier un par un:

def "Get Stream Builder"() { 
    when: 
    def actualStreamBuilder = fileProcessor.streamBuilder 

    then: 
    actualStreamBuilder.name == BEAN_IO_STREAM_NAME 
    actualStreamBuilder.format == FILE_FORMAT 
    actualStreamBuilder.records == [FileHeader.class, Records.class] 
} 

Bien sûr, dans ce cas, vous devez avoir getName(), getFormat(), etc.