2

我的故事档案:

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转换器也不能正常工作。

我的配置有什么问题(我认为这是我的配置)?

4

1 回答 1

2

问题是您的方法 initUsers 是私有的。只需将其公开,JBehave 引擎就可以看到它:

@BeforeStories
public void initUsers() {
//...
}
于 2013-01-15T22:46:23.913 回答