2013-01-13 62 views
2

我的故事文件:Jbehave - @beforeStories不起作用

Narrative: 
In order to document all the business logic requests 
As a user 
I want to work with documents 

Scenario: Basic new document creation 
Given a user name Micky Mouse 
When new document created 
Then the document should named new document 
And the document status should be NEW 

我的代碼:

public class DocStories extends JUnitStory { 

    @Override 
    public Configuration configuration() { 
     return new MostUsefulConfiguration().useStoryLoader(
       new LoadFromClasspath(getClass().getClassLoader())) 
       .useStoryReporterBuilder(
         new StoryReporterBuilder().withFormats(Format.STATS, 
           Format.HTML, Format.CONSOLE, Format.TXT)); 

    } 

    @Override 
    public List<CandidateSteps> candidateSteps() { 
     return new InstanceStepsFactory(configuration(), new DocSteps()) 
       .createCandidateSteps(); 
    } 

    @Override 
    @Test 
    public void run() throws Throwable { 
     try { 
      super.run(); 
     } catch (Exception e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 

} 

在類我的步驟:

public class DocSteps { 
    private final Map<String, User> users = new HashMap<String, User>(); 
    private final DocManager manager = new DocManager(); 

    private User activeUser; 
    private Document activeDocument; 
    private boolean approvedResult; 

    *****************BEFORE***************// 
    @BeforeStories 
    private void initUsers() { 
    users.put("Micky Mouse", new User("Micky Mouse", UserRole.ANALYST)); 
    users.put("Donald Duck", new User("Donald Duck", UserRole.BCR_LEADER)); 
    System.out.println("Check this out" + users.toString()); 
    } 

    // **********steps*************// 
@Given("a user name $userName") 
public void connectUser(String userName) { 
    // in the real world - it will get the user from the db 
    System.out.println(userName); 
    activeUser = new User(userName, UserRole.ANALYST); 
    // System.out.println(activeDocument.getName()); 
} 

@Given("a new document") 
@When("new document created") 
public void createDocument() { 
    activeDocument = new Document(); 
} 

@Given("a document with content") 
public void createDocWithContect() { 
    createDocument(); 
    activeDocument.setContent("this is a document"); 
} 

@Then("the document should named $docName") 
@Alias("the document name should be $docName") 
public void documentNameShouldBe(String docName) { 
    Assert.assertEquals(docName, activeDocument.getName()); 
} 

@Then("the document status should be $status") 
public void documentStatusShouldBe(String status) { 
    DocStatus docStatus = DocStatus.valueOf(status); 
    Assert.assertThat(activeDocument.getStatus(), 
      Matchers.equalTo(docStatus)); 
} 

    // *****************AFTER***************// 
    @AfterScenario 
    public void clean() { 
     activeUser = null; 
     activeDocument = null; 
     approvedResult = false; 
    } 

} 

與方法「之前和之後」的故事註解不會被執行。 enum轉換器不能正常工作。

我的配置有什麼問題(我認爲它是我的配置)?

+0

請添加相應的.story文件 - 我有一種預感 – dertseha

+0

我加入了故事FIKE –

回答

2

問題是你的initUsers方法是私有的。只要把它公開,這將是可見的JBehave引擎:

@BeforeStories 
public void initUsers() { 
//... 
} 
+0

男人,那是很容易 - 我沒注意到那。謝謝 –