【问题标题】:Testing Dropwizard 'Application' class测试 Dropwizard 'Application' 类
【发布时间】:2016-12-11 17:26:02
【问题描述】:

我希望在不引导整个 Dropwizard 服务器的情况下测试 Dropwizard 的“应用程序”类。

我基本上只是想确保我正在注册的一个捆绑包已成功注册。

到目前为止,我遇到的所有路由都导致 NullPointer 异常,因为其他各种组件没有正确设置。这里有一条简单的路吗?

public class SentimentApplication extends Application<SentimentConfiguration> {

    public static void main(final String[] args) throws Exception {
        new SentimentApplication().run(args);
    }

    @Override
    public String getName() {
        return "Sentiment";
    }

    @Override
    public void initialize(final Bootstrap<SentimentConfiguration> bootstrap) {
        bootstrap.setConfigurationSourceProvider(
            new SubstitutingSourceProvider(bootstrap.getConfigurationSourceProvider(),
                    new EnvironmentVariableSubstitutor(false)
            )
        );
    }

    @Override
    public void run(final SentimentConfiguration configuration,
                    final Environment environment) {
        // TODO: implement application
    }

} 

【问题讨论】:

  • 什么代码会产生 NPE,请您也分享一下堆栈跟踪。

标签: java dropwizard


【解决方案1】:

您可以注册一个简单的命令并使用该命令而不是服务器命令调用应用程序的run 方法。这样,您的应用程序将在不运行服务器的情况下执行。

我想做与你想要的类似的事情。 (考虑ExampleApp 作为我代码的主要Application 类)我想编写一个测试以确保解析配置时没有异常。 (因为KotlinModule()应该已经在app的initialize方法中注册到environment.objectMaooer,否则我们会遇到运行时错误。)我用类似的东西实现了它:

import io.dropwizard.cli.EnvironmentCommand
import io.dropwizard.setup.Bootstrap
import io.dropwizard.setup.Environment
import com.example.config.ExampleConfiguration
import net.sourceforge.argparse4j.inf.Namespace
import org.junit.Test
import kotlin.test.assertEquals
import kotlin.test.assertNotNull

class DummyCommand(app: DummyApp) : EnvironmentCommand<ExampleConfiguration>(app, "dummy", "sample test cmd") {
    var parsedConfig: ExampleConfiguration? = null

    override fun run(environment: Environment, namespace: Namespace, configuration: ExampleConfiguration) {
        parsedConfig = configuration
    }
}

class DummyApp : ExampleApp() {
    val cmd: DummyCommand by lazy { DummyCommand(this) }

    override fun initialize(bootstrap: Bootstrap<ExampleConfiguration>) {
        super.initialize(bootstrap)
        bootstrap.addCommand(cmd)
    }
}

class ExampleAppTest {
    @Test
    fun `Test ExampleConfiguration is parsed successfully`() {
        val app = DummyApp()
        app.run("dummy", javaClass.getResource("/example-app-test/test-config.yml").file)
        val config = app.cmd.parsedConfig
        assertNotNull(config)
        assertEquals("foo", config.nginxUsername)
    }
}

【讨论】:

    猜你喜欢
    • 2013-07-07
    • 1970-01-01
    • 1970-01-01
    • 2015-02-12
    • 1970-01-01
    • 2017-12-19
    • 2021-01-23
    • 2015-03-28
    • 1970-01-01
    相关资源
    最近更新 更多