2

私は jbehave や自動テストにまったく慣れていません。オンラインでチュートリアルを読み、手順に従ってみました。

このアプリケーションを Eclipse IDE で実行しようとしています。

テストを含む Math.story ファイルを作成しました。

Scenario: 2 squared
Given a variable x with value 2
When I multiply x by 2 
Then x should equal 4

ExampleSteps.java という .java ファイルに、手順が次のように記述されています。

import org.jbehave.core.annotations.Given;
import org.jbehave.core.annotations.Named;
import org.jbehave.core.annotations.Then;
import org.jbehave.core.annotations.When;
import org.jbehave.core.steps.Steps;

public class ExampleSteps extends Steps {
    int x;

    @Given("a variable x with value $value")
    public void givenXValue(@Named("value") int value) {
        x = value;
    }

    @When("I multiply x by $value")
    public void whenImultiplyXBy(@Named("value") int value) {
        x = x * value;
    }

    @Then("x should equal $value")
    public void thenXshouldBe(@Named("value") int value) {
        if (value != x)
            throw new RuntimeException("x is " + x + ", but should be " + value);
    }
}

main メソッドを持つ別のクラス SimpleJbehave を作成しました。java.util.List をインポートします。

import org.jbehave.core.embedder.Embedder;

public class SimpleJBehave {

    private static Embedder embedder = new Embedder();
    private static List<String> storyPaths = Arrays
            .asList("Math.story");

    public static void main(String[] args) {
        embedder.candidateSteps().add(new ExampleSteps());
        embedder.runStoriesAsPaths(storyPaths);

    }
}

このコードを実行すると、次の例外が発生します。

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/collections/Transformer
    at org.jbehave.core.configuration.Configuration.<init>(Configuration.java:112)
    at org.jbehave.core.configuration.MostUsefulConfiguration.<init>(MostUsefulConfiguration.java:49)
    at org.jbehave.core.embedder.Embedder.<init>(Embedder.java:30)
    at org.jbehave.core.embedder.Embedder.<init>(Embedder.java:37)
    at SimpleJBehave.<clinit>(SimpleJBehave.java:8)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.collections.Transformer
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    ... 5 more

私は初心者なので、問題が正確に何であるかを理解できませんでした。

このコードを機能させるために何をすべきかを誰かが教えてくれたら、本当にうれしいです。私のアプローチは間違っていますか?

事前にどうもありがとうございました。

4

1 に答える 1

1

org.apache.commons.collections.Transformerクラスパスにないようです。このクラスは、次の apache-commons-transformer ライブラリで利用できるようです: http://commons.apache.org/collections/api-release/org/apache/commons/collections/Transformer.html

jar をダウンロードして、クラスパスに追加します。それはうまくいくかもしれません。

于 2012-10-18T03:07:25.767 に答える