2012-06-21 13 views
7

Scenariusz jest taki:dodatkowe rejestrowanie JBehave

Używamy JBehave i selen dla systemu, integrację i końca do końca badania. Sprawdzam wyniki obliczeń na stronie powyżej 20 wartości do sprawdzenia. Korzystanie z Junit Assert cały test zakończy się niepowodzeniem w pierwszym wystąpieniu jednej z nieprawidłowych wartości. Co chciałem zrobić, to jeśli spełniony jest błąd asercji, to test jest kontynuowany, więc mogę zestawiać wszystkie wartości, które są niepoprawne w jednym przebiegu testowym, a nie w wielu testach.

Aby to zrobić, przechwytuję twierdzenia i zapisuję w pliku dziennika wszystko, co nie powiedzie się sprawdzeniu poprawności. To pozostawiło mnie z kilkoma problemami:

1) Plik dziennika, w którym zapisuję błędy asercji, nie zawiera nazwy historii JBehave lub scenariusza, który był uruchamiany w momencie wystąpienia wyjątku.

2) Historia lub scenariusz JBehave jest wymieniony jako "Przekazywany" i chcę, aby był wymieniony jako "Nieudany".

Czy istnieje sposób, w jaki mogę zapisać nazwę historii i scenariusza w dodatkowym pliku dziennika LUB uzyskać dodatkowe rejestrowanie zapisywane w pliku dziennika JBehave?

W jaki sposób mogę uzyskać Scenariusz/Scenariusz oznaczony jako nieudany?

W konfiguracji JBehave mam:

configuredEmbedder() 
    .embedderControls() 
    .doIgnoreFailureInStories(true) 
    .doIgnoreFailureInView(false) 
    .doVerboseFailures(true) 
    .useStoryTimeoutInSecs(appSet.getMaxRunningTime()); 

i

.useStoryReporterBuilder(
    new StoryReporterBuilder() 
    .withDefaultFormats() 
    .withViewResources(viewResources) 
    .withFormats(Format.HTML, Format.CONSOLE) 
    .withFailureTrace(true) 
    .withFailureTraceCompression(true) 
    .withRelativeDirectory("jbehave/" + appSet.getApplication()) 

Odpowiedz

11

Tak, można stworzyć swój własny StoryReporter:

public class MyStoryReporter implements org.jbehave.core.reporters.StoryReporter{ 
    private Log log = ... 

    @Override 
    public void successful(String step) { 
     log.info(">>successStep:" + step); 
    } 

    @Override 
    public void failed(String step, Throwable cause) { 
     log.error(">>error:" + step + ", reason:" + cause); 
    } 

    ... 
} 

i zarejestrować go tak:

.useStoryReporterBuilder(
    new StoryReporterBuilder() 
     .withReporters(new MyStoryReporter()) 
.. 
+0

Dziękuję. To było naprawdę przydatne. –

+0

Czy możesz dodać więcej informacji na temat tworzenia rejestratorów. Proszę wyjaśnić: private Log log = ... – farheen

+0

To zależy od tego, z której struktury logowania korzystasz. Jeśli używasz slf4j: 'Logger log = LoggerFactory.getLogger (MyStoryReporter.class);'. Najważniejsze jest to, że może to być cokolwiek w tych metodach wywołania zwrotnego - możesz zrobić sysout, napisać do bazy danych lub cokolwiek innego – plasma147