相关疑难解决方法(0)

如何管理Kotlin中的单元测试资源,例如启动/停止数据库连接还是嵌入式弹性搜索服务器?

在我的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)

junit unit-testing kotlin

74
推荐指数
1
解决办法
2万
查看次数

更轻松的DynamoDB本地测试

我正在使用DynamoDB本地进行单元测试.这不错,但有一些缺点.特别:

  • 在测试运行之前,您必须以某种方式启动服务器
  • 服务器在每次测试之前都没有启动和停止,因此测试变得相互依赖,除非您在每次测试后添加代码以删除所有表等
  • 所有开发人员都需要安装它

我想要做的就是将DynamoDB本地jar和它所依赖的其他jar放在我的test/resources目录中(我正在编写Java).然后在每次测试之前,我会启动它,运行-inMemory,并且在测试之后我会停止它.这样,任何下拉git repo的人都会获得运行测试所需的所有内容的副本,并且每个测试都独立于其他测试.

我已经找到了一种方法来完成这项工作,但这很难看,所以我正在寻找替代方案.我的解决方案是将一个DynamoDB本地内容的.zip文件放在test/resources中,然后在@Before方法中,我将它解压缩到一些临时目录并启动一个新的java进程来执行它.这是有效的,但它很难看并且有一些缺点:

  • 每个人都需要$ PATH上的java可执行文件
  • 我必须将zip解压缩到本地磁盘.使用本地磁盘通常是测试的冒险,特别是对于连续构建等.
  • 我必须生成一个进程并等待它开始进行每个单元测试,然后在每次测试后终止该进程.除了缓慢之外,剩余过程的可能性似乎很难看.

似乎应该有一个更简单的方法.毕竟,DynamoDB Local只是Java代码.我不能以某种方式要求JVM自行分配并查看资源以构建类路径吗?或者,更好的是,我不能只main从其他线程调用DynamoDb Local 的方法,所以这一切都发生在一个进程中?有任何想法吗?

PS:我知道Alternator,但它似乎还有其他缺点,所以如果我可以让它发挥作用,我倾向于坚持亚马逊的支持解决方案.

java junit unit-testing amazon-dynamodb

46
推荐指数
7
解决办法
4万
查看次数

您能以某种方式运行AWS DynamoDB的本地副本吗?

如果您想编写代码以使用AWS DynamoDB,有没有办法让它在您的本地开发环境中运行?或者你必须使用实际的产品?

您是否必须在AWS上配置开发环境?这不是很烦人,因为你必须使用vim并且无法访问你喜欢的IDE吗?或者,每当你想看看你写的是否有效时,你必须将代码推送到它?

development-environment amazon-web-services amazon-dynamodb

17
推荐指数
1
解决办法
1万
查看次数

如何以编程方式启动本地DynamoDB?

我可以通过此命令从bash 启动本地 DynamoDB服务器:

java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDb &
Run Code Online (Sandbox Code Playgroud)

是不是有一种纯java方式在一个代码中启动服务器?我并不是指通过Process对象对shell进行java 调用,而是一种方式,当我运行我的应用程序时,服务器启动,当我的应用程序被杀死时,服务器被终止.

如果存在这样的模式,我可以使用嵌入式数据库,尽管反映服务器一致性语义的东西是理想的.

amazon-dynamodb

14
推荐指数
1
解决办法
9272
查看次数

在Mac OS X上使用java命令运行DynamoDB Local

我正在尝试在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)

它现在终于工作了...亚马逊文档有一些问题..

java macos terminal amazon-web-services amazon-dynamodb

6
推荐指数
1
解决办法
3475
查看次数

Mac OS X NetBeans上的sqlite4java Jar出现UnsatisfiedLinkError

我遇到了与此问题类似的问题:

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

java sqlite macos unsatisfiedlinkerror

4
推荐指数
1
解决办法
4057
查看次数