测试Dropwizard'应用程序'类

时间:2016-12-11 17:26:03

标签: java dropwizard

我希望在没有引导整个Dropwizard服务器的情况下测试Dropwizard'Application'类。

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

由于各种其他组件未正确设置,我到目前为止所有路由都会导致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
    }

} 

1 个答案:

答案 0 :(得分:0)

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

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

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)
    }
}