我希望在没有引导整个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
}
}
答案 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)
}
}