4

現在、Springを使用してstepsクラスをJUnitテストに注入しています。

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration...
class MyTest extends JUnitStories {
    @Autowired private MySteps mySteps;

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

    ...
}

複数のスレッドでJBehaveを実行したいので、シングルトンのMyStepsBeanを注入できなくなりました。

http://jira.codehaus.org/browse/JBEHAVE-492を読みましたが、問題を解決する方法がわかりません。

4

1 に答える 1

5

これはずっと前に尋ねられましたが、答えは次のとおりです。ThreadLocal変数で状態を保持するか、独自のクラスの1つでThreadLocal変数をラップすることをお勧めします。たとえば、このコードを見てください

州のクラス

public class State {
   private ThreadLocal<String> state;

   public void setState(String state) {
      this.state.set(state);
   }

   public String getState() {
      return this.state.get();
   }
}

そして、手順

public class Steps {
   private State state;

   public Steps(State state) {
      this.state = state;
   }

   @Given("the following happens: $string")
   public void somethingHappens(String string) {
      state.setState(string);
   }

   @When("who knows")
   public void whoKnows() {
      String stat = state.getState();
   }

   @BeforeScenario
   public void cleanup() {
      state.setState(null);
   }
}

異なるシナリオ間のあらゆる種類のリークを防ぐために、シナリオが変数をクリアする前に何かを用意することをお勧めします。

于 2012-08-30T09:12:42.617 に答える