通过Maven运行多个JBehave故事时无法加载sqljdbc_auth.dll

时间:2016-10-04 17:31:03

标签: java windows maven jbehave

我正在使用一个有三个模块的Maven项目:

  • 数据库
  • 包含JBehave故事的模块(Story .java,.story和steps .java文件)
  • 包含JBehave Story的另一个模块(Story .java,.story和steps .java文件)

包含JBehave Story的两个模块都具有相同类型的.java文件,用于运行.story文件和步骤。下面是两个模块都有的.java文件(但是出于测试目的而有不同的名称):

public class FirstStories extends ConfigurableEmbedder {
    private SqlDataSourceProvider dataSourceProvider = new SqlDataSourceProvider();
    private final CrossReference xref = new CrossReference();
    private Context context = new Context();
    private Format contextFormat = new ContextOutput(context);
    private ContextView contextView = new JFrameContextView().sized(640, 120);
    private ContextStepMonitor contextStepMonitor = new ContextStepMonitor(context, contextView, xref.getStepMonitor());

    public FirstStories() {
        System.setProperty("jbehave.test", "true");
        configuredEmbedder().embedderControls().doGenerateViewAfterStories(true).doIgnoreFailureInStories(false)
                .doIgnoreFailureInView(true).doVerboseFailures(true).useThreads(1).useStoryTimeouts("5m");
        configuredEmbedder().useEmbedderControls(new PropertyBasedEmbedderControls());
    }

    @Test
    @Override
    public void run() throws Throwable {
        Embedder embedder = configuredEmbedder();
        try {
            embedder.runStoriesAsPaths(storyPaths());
        } finally {
            embedder.generateCrossReference();
        }
    }

    @Override
    public Configuration configuration() {
        Properties viewResources = new Properties();
        viewResources.put("decorateNonHtml", "true");
        viewResources.put("reports", "ftl/jbehave-reports-with-totals.ftl");

        return new MostUsefulConfiguration()
                .useStoryReporterBuilder(
                        new StoryReporterBuilder()
                                .withDefaultFormats()//.withViewResources(viewResources)
                                .withFormats(contextFormat, CONSOLE, TXT, HTML_TEMPLATE, XML_TEMPLATE).withFailureTrace(true)
                                .withFailureTraceCompression(true).withCrossReference(xref))
                .useStepMonitor(contextStepMonitor);
    }

    @Override
    public InjectableStepsFactory stepsFactory() {
        return new InstanceStepsFactory(configuration(), new Steps(dataSourceProvider));
    }

    private List<String> storyPaths() {
        String filter = System.getProperty("story.filter", "**/*.story");
        return new StoryFinder().findPaths(codeLocationFromClass(this.getClass()), filter, "**/failing_before*.story");
    }
}

.story文件非常直接,只有一个场景:

Meta:

Narrative:
As a user
I want to perform an action
So that I can achieve a business goal

Scenario: Test scenario
Given nothing
When I do nothing
Then nothing happens

步骤文件只包含一个无操作方法,只是为了让一切正常运行。

当通过maven运行两个JBehave测试时,第一个故事将运行得很好。然而,当启动第二个故事时,会出现以下消息,并且测试很快就会失败(我可以自行运行第二个故事而不会出现问题,只有当它在第一个故事之后运行时):

WARNING: Failed to load the sqljdbc_auth.dll cause : Native Library C:\Windows\System32\sqljdbc_auth.dll already loaded in another classloader

java.sql.SQLException: An attempt by a client to checkout a Connection has timed out.

在我的故事的run()方法中是否有一些我忘记做的事情,以确保在故事结束后一切都被正确销毁,所以下一个故事可以正常运行而没有问题?

0 个答案:

没有答案