Blog

So verkabeln Sie Ihre FitNesse-Geräte mit Spring

Lars Vonk

Aktualisiert Oktober 23, 2025
2 Minuten

Zum Testen meiner Anwendungen verwende ich gerne FitNesse und zum Schreiben meiner Anwendungen verwende ich häufig Spring. Da es in FitNesse keine Möglichkeit gibt, den Mechanismus für die Instanziierung der Fixtures außer Kraft zu setzen, müssen Sie den Spring-Kontext irgendwie laden und die Beans, die Sie testen möchten, aus dem Spring-Kontext abrufen. Sie können dies natürlich auch von Hand tun und die Beans aus dem Anwendungskontext abrufen, aber das macht Ihren Fixture-Code etwas unübersichtlich. Besser ist es, Spring die Verdrahtung zu überlassen.

Um Spring Ihre Fixtures verdrahten zu lassen, können wir die von der AutowireCapableBeanFactory angebotenen Funktionen nutzen. Wenn wir einen ClassPathXmlApplicationContext erstellen, können wir einen Verweis auf die AutowireCapableBeanFactory erhalten. Der Mechanismus, den ich hier beschreibe, wird auch in den AbstractDependencyInjectionSpringContextTests verwendet, die von Spring bereitgestellt werden, um Ihre JUnit-Tests mit Spring-Beans zu injizieren. Hier ist der endgültige Code, der für die Injektion Ihrer Fixtures benötigt wird: Code zum Laden des Spring-Kontexts und der Wire-Fixtures:

public class FixtureWirer {
  private static AutowireCapableBeanFactory beanFactory;
  statisch {
  beanFactory = new ClassPathXmlApplicationContext("/applicationContext.xml").getAutowireCapableBeanFactory();
  }
  public static void wire(Fixture fixture) {
  // Stellen Sie sicher, dass Sie AUTOWIRE_BY_NAME verwenden, sonst wird Spring sich beschweren
  // über die Injektion der Eigenschaft systemUnderTest in der Oberklasse, die vom Typ Objekt ist.
  beanFactory.autowireBeanProperties(fixture, AutowireCapableBeanFactory.AUTOWIRE_BY_NAME, false);
  }
}

Code in einem Fixture: (in diesem Fall ein SetupFixture).

public class ApplicationSetup extends SetUpFixture {
  private SomeRepository someRepository;
  @Override
  protected void setUp() throws Exception {
  FixtureWirer.wire(this);
  }
  public void setSomeRepository(SomeRepository someRepository) {
  this.someRepository = someRepository;
  }
  // Rest des Einrichtungscodes, in dem Sie someRepository verwenden können, weggelassen...
}

Viel Spaß beim Testen.

Verfasst von

Lars Vonk

Contact

Let’s discuss how we can support your journey.