在我的Kotlin JUnit测试中,我想启动/停止嵌入式服务器并在我的测试中使用它们.
我尝试@Before在我的测试类中的方法上使用JUnit 注释,它工作正常,但它不是正确的行为,因为它运行每个测试用例而不是一次.
因此,我想@BeforeClass在方法上使用注释,但将其添加到方法会导致错误,说它必须在静态方法上.Kotlin似乎没有静态方法.然后同样适用于静态变量,因为我需要保留对嵌入式服务器的引用,以便在测试用例中使用.
那么如何为我的所有测试用例创建一次这个嵌入式数据库呢?
class MyTest {
@Before fun setup() {
// works in that it opens the database connection, but is wrong
// since this is per test case instead of being shared for all
}
@BeforeClass fun setupClass() {
// what I want to do instead, but results in error because
// this isn't a static method, and static keyword doesn't exist
}
var referenceToServer: ServerType // wrong because is not static …Run Code Online (Sandbox Code Playgroud) 我正在使用DynamoDB本地进行单元测试.这不错,但有一些缺点.特别:
我想要做的就是将DynamoDB本地jar和它所依赖的其他jar放在我的test/resources目录中(我正在编写Java).然后在每次测试之前,我会启动它,运行-inMemory,并且在测试之后我会停止它.这样,任何下拉git repo的人都会获得运行测试所需的所有内容的副本,并且每个测试都独立于其他测试.
我已经找到了一种方法来完成这项工作,但这很难看,所以我正在寻找替代方案.我的解决方案是将一个DynamoDB本地内容的.zip文件放在test/resources中,然后在@Before方法中,我将它解压缩到一些临时目录并启动一个新的java进程来执行它.这是有效的,但它很难看并且有一些缺点:
似乎应该有一个更简单的方法.毕竟,DynamoDB Local只是Java代码.我不能以某种方式要求JVM自行分配并查看资源以构建类路径吗?或者,更好的是,我不能只main从其他线程调用DynamoDb Local 的方法,所以这一切都发生在一个进程中?有任何想法吗?
PS:我知道Alternator,但它似乎还有其他缺点,所以如果我可以让它发挥作用,我倾向于坚持亚马逊的支持解决方案.
如果您想编写代码以使用AWS DynamoDB,有没有办法让它在您的本地开发环境中运行?或者你必须使用实际的产品?
您是否必须在AWS上配置开发环境?这不是很烦人,因为你必须使用vim并且无法访问你喜欢的IDE吗?或者,每当你想看看你写的是否有效时,你必须将代码推送到它?
我可以通过此命令从bash 启动本地 DynamoDB服务器:
java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDb &
Run Code Online (Sandbox Code Playgroud)
是不是有一种纯java方式在一个代码中启动服务器?我并不是指通过Process对象对shell进行java 调用,而是一种方式,当我运行我的应用程序时,服务器启动,当我的应用程序被杀死时,服务器被终止.
如果存在这样的模式,我可以使用嵌入式数据库,尽管反映服务器一致性语义的东西是理想的.
我正在尝试在MAC上本地运行DynamoDB.在亚马逊官方博客上说我必须下载jar文件,并运行以下命令:
$ java –Djava.library.path=. -jar DynamoDBLocal.jar
Run Code Online (Sandbox Code Playgroud)
但是我在MAC OS X终端上遇到以下错误:
错误:无法找到或加载主类-Djava.library.path =.
武汉理工大学?命令接缝不识别-D参数..为什么?
我也在研究Linux(Fedora),我从来没有遇到任何问题.
在MAC OS X上,java -version给我java version "1.8.0_11"
可能是什么问题呢?(我对java命令不太了解)
编辑1:感谢@Swapnil,我们可以注意到亚马逊博客上存在拼写错误,他们使用错误的短划线字符(EN DASH unicode U + 2013)作为-D参数.请注意,亚马逊文档(不是博客)没有拼写错误,并且还引用了最新的二进制文件.
编辑2:使用正确的破折号,参数由java解释,但在运行时仍然有一个(不同的)错误消息:
严重:[sqlite] SQLiteQueue [AKID_eu-west-1.db]:运行作业队列错误com.almworks.sqlite4java.SQLiteException:[ - 91]无法加载库:java.lang.UnsatisfiedLinkError:java中没有sqlite4java-osx-x86_64 .library.path
我这样解决了:
java -Djava.library.path=./DynamoDBLocal_lib/ -jar DynamoDBLocal.jar
Run Code Online (Sandbox Code Playgroud)
它现在终于工作了...亚马逊文档有一些问题..
我遇到了与此问题类似的问题:
在Mac OS X上使用sqlite4java Jar出现UnsatisfiedLinkError
但是,我在Mac上运行,并且我的lib文件夹中有相关的库。但是,如果按原样运行,则会收到UnsatisfiedLinkError。如果运行“ java -jar sqlite4java.jar -d”,则会得到以下输出:
sqlite4java 282
130321:222850.424 FINE [sqlite] Internal: loading library
130321:222850.425 FINE [sqlite] Internal: java.library.path=/Users/mikey/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:.
130321:222850.425 FINE [sqlite] Internal: sqlite4java.library.path=null
130321:222850.425 FINE [sqlite] Internal: cwd=/Users/mikey/NetBeansProjects/Test/lib/.
130321:222850.425 FINE [sqlite] Internal: default path=/Users/mikey/NetBeansProjects/Test/lib
130321:222850.425 FINE [sqlite] Internal: forced path=null
130321:222850.426 FINE [sqlite] Internal: os.name=mac os x; os=osx
130321:222850.426 FINE [sqlite] Internal: os.arch=x86_64
130321:222850.426 FINE [sqlite] Internal: trying to load sqlite4java-osx-x86_64
130321:222850.427 FINE [sqlite] Internal: cannot load sqlite4java-osx-x86_64: java.lang.UnsatisfiedLinkError: no sqlite4java-osx-x86_64 in java.library.path
130321:222850.427 FINE …Run Code Online (Sandbox Code Playgroud)