小编Flo*_*etz的帖子

在同一个对象上多次调用Mockito.

当试图使用Spring的Mockito时,通过bean声明创建Mock对象......

<bean id="accountMapper" class="org.mockito.Mockito" factory-method="mock"> 
    <constructor-arg value="org.example.persistence.mybatis.mappers.AccountMapper" /> 
</bean>     
Run Code Online (Sandbox Code Playgroud)

...我在调用Mockito时发现了一些奇怪的行为.多次没有重置Mock对象,例如:

Mockito.when(this.accountMapper.createBadGrammarException()).thenThrow(new BadSqlGrammarException("Bla", null, new SQLException()));
Run Code Online (Sandbox Code Playgroud)

一旦在测试期间(在同一模拟器上)多次调用此代码("Mockito.when"),测试就会失败并出现错误(BadSqlGrammerException,即使此异常是实际预期的 - 我确实失败了如果我不抛出异常,并手动抛出它工作正常).这是预期的行为吗?Mockito似乎建议每次创建一个新的模拟,这意味着为每个方法创建DAO ......?

当我两次调用Mockito.when方法时到底发生了什么?模拟应该如何反应?替换行为?忽略它?不幸的是,大多数搜索仅产生如何为方法本身的多次调用返回不同结果的结果,但不会产生多次调用Mockito所期望的结果.当...

我只是想在这里了解Mockito和最佳实践,因为只是因为它看起来很有效,所以选择一些东西似乎是一个坏主意......

java spring unit-testing mockito

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

必须使用"putIfAbsent"的返回值 - 真的吗?

我有一个这样的ConcurrentMaps的ConcurrentMap ...

ConcurrentMap<String, ConcurrentMap<K, V>> mapsMap = new ConcurrentHashMap<>();
Run Code Online (Sandbox Code Playgroud)

现在在某些方法中,我想通过确保某个键的映射存在来阻止NPE ...

 mapsMap.putIfAbsent(someKey, new ConcurrentHashMap<K, V>());
Run Code Online (Sandbox Code Playgroud)

...所以我可以安全地称之为......

 mapsMap.get(someKey).put(...);
Run Code Online (Sandbox Code Playgroud)

......这里不用担心空值.

现在,Sonarqube告诉我,这违反了RSPEC-2201规则......

不应忽略没有副作用的函数的返回值[..]以及ConcurrentMap.putIfAbsent调用忽略返回值.

这只是SonarQube没有检测到方法的副作用对我来说足够了(并且返回值不会添加任何信息)或者我是否错过了关于putIfAbsent合约的重要观点?

java sonarqube

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

Spring-Data Repository @Query by class with generic class

假设我有以下实体:

@Entity
public class Word { ... }

@Entity
public class Noun extends Word { ... }

@Entity
public class Verb extends Word { ... }
Run Code Online (Sandbox Code Playgroud)

(加上通常的鉴别器和连接策略的东西,简单地假设实体工作正常,他们确实这样做了。)

我试过 ...

public interface WordRepository extends CrudRepository<Word, Long>{

     @Query("SELECT x FROM Word x WHERE type(x) = ?1")
     <T extends Word> List<T> findByClass(Class<T> clz);

}
Run Code Online (Sandbox Code Playgroud)

...但这给了我一个例外,由以下原因引起:

org.hibernate.QueryException: Not all named parameters have been set: [1] [SELECT x FROM Word x WHERE type(x) = ?1]
Run Code Online (Sandbox Code Playgroud)

一个解决办法是更换 Class<T>Class<?>,那么代码的作品,但很明显,自那以后我可以写的不是类型安全的了...

List<Verb> verbs = repository.findByClass(Noun.class); …
Run Code Online (Sandbox Code Playgroud)

java generics spring jpa spring-data-jpa

5
推荐指数
1
解决办法
1116
查看次数

Spring Data Repository @Query-更新并返回修改后的实体

假设我们有一个带有自定义方法的Spring Data存储库接口...

@Modifying
@Transactional
@Query("UPDATE MyEntity SET deletedAt = CURRENT_TIMESTAMP WHERE id = ?1")
void markAsSoftDeleted(long id);
Run Code Online (Sandbox Code Playgroud)

此方法只是将实体的deleteAt字段设置为确定。有什么办法允许此方法返回的更新版本MyEntity

明显...

@Modifying
@Transactional
@Query("UPDATE MyEntity SET deletedAt = CURRENT_TIMESTAMP WHERE id = ?1")
MyEntity markAsSoftDeleted(long id);
Run Code Online (Sandbox Code Playgroud)

...不起作用,因为...

java.lang.IllegalArgumentException:修改查询只能使用void或int / Integer作为返回类型!

有谁知道另一种轻松地允许这种方式的方法,当然,显而易见的是“在存储库和调用者之间添加一个服务层来实现这些功能”……

java spring spring-data

5
推荐指数
1
解决办法
3919
查看次数

java中的字符串replaceAll()

你能解释一下输出吗?

String str = "Total Amount is AMOUNT";
String amount = "$10.00";
str = str.replaceAll("AMOUNT", amount);
System.out.println(str);
Run Code Online (Sandbox Code Playgroud)

什么是输出?它抛出异常

Exception in thread "main" java.lang.IndexOutOfBoundsException: No group 1
Run Code Online (Sandbox Code Playgroud)

通过删除$的工作.为什么?

java

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

在一个语句中使用和/或/否定方法创建谓词?

java.util.function.Predicate有一些有用的方法等and,or等,其比创建具有多个逻辑运算符的托架狂欢更简洁.不幸的是,似乎没有办法使用这些函数而没有实际上首先明确地使用谓词...

Predicate<String> predicate = String::isEmpty;
Predicate<String> predicateWithAnd = predicate.and( MyClass::testSomething ); 
Run Code Online (Sandbox Code Playgroud)

有没有办法只在一个语句中创建第二谓词(因此"保存"变量),如...

Predicate<String> predicateWithAnd = (String::isEmpty).and( MyClass::testSomething );  // That doesn't seem to work ;-)
Run Code Online (Sandbox Code Playgroud)

只是好奇...

java functional-programming predicate java-8 method-reference

3
推荐指数
1
解决办法
714
查看次数

Eclipse Mars在Subclipse密码存储上冻结

我在Ubuntu 12.04上安装了当前的Eclipse Mars,这似乎工作正常,但不幸的是,每当我选择存储svn存储库的密码时,Eclipse都会冻结.如果我没有选中"存储密码"复选框,一切正常(除了密码未保存,显然).

任何人都知道问题可能是什么?当然,用户是工作区和eclipse目录的所有者.

eclipse subclipse ubuntu-12.04 eclipse-mars

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

使用Apache QPID在本地测试RabbitMQ-随机端口

我想为连接到RabbitMQ的某些组件设置一些本地测试。为此,一种解决方案似乎是QPID内存代理,并且在遵循这些说明时(仅使用当前版本的7.0.3而不是7.0.0)实际上非常有效。

对于Rabbit MQ,我删除了"AMQP_1_0"协议,仅添加了qpid- broker-plugins-amqp-0-8-protocoldependency。我也用替换AuthenticationproviderPLAIN。这足以使我的RabbitMQ组件正常工作并通过该组件发送/接收消息Broker

但是问题是这条线...

"port" : "${qpid.amqp_port}",
Run Code Online (Sandbox Code Playgroud)

据我了解,这应该允许我通过在调用时设置此属性来定义代理正在侦听的端口systemLauncher.startup

attributes.put("qpid.amqp_port", 12345);
Run Code Online (Sandbox Code Playgroud)

不幸的是,这不起作用,并且代理总是在默认端口(5672,iirc)上侦听。显然,这对于自动化测试不是最佳选择,因此我正在寻找以下一种可能性(或更好的一种):

  1. 在属性中放置一个随机端口(我自己可以找到一个开放端口,没问题)或...
  2. 告诉QPID使用随机(开放)端口-但随后我还需要知道实际使用的端口,因为SystemLauncher似乎没有提供任何查询方式。

java testing rabbitmq qpid

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