当试图使用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和最佳实践,因为只是因为它看起来很有效,所以选择一些东西似乎是一个坏主意......
我有一个这样的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合约的重要观点?
假设我有以下实体:
@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) 假设我们有一个带有自定义方法的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作为返回类型!
有谁知道另一种轻松地允许这种方式的方法,当然,显而易见的是“在存储库和调用者之间添加一个服务层来实现这些功能”……
你能解释一下输出吗?
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.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
我在Ubuntu 12.04上安装了当前的Eclipse Mars,这似乎工作正常,但不幸的是,每当我选择存储svn存储库的密码时,Eclipse都会冻结.如果我没有选中"存储密码"复选框,一切正常(除了密码未保存,显然).
任何人都知道问题可能是什么?当然,用户是工作区和eclipse目录的所有者.
我想为连接到RabbitMQ的某些组件设置一些本地测试。为此,一种解决方案似乎是QPID内存代理,并且在遵循这些说明时(仅使用当前版本的7.0.3而不是7.0.0)实际上非常有效。
对于Rabbit MQ,我删除了"AMQP_1_0"
协议,仅添加了qpid- broker-plugins-amqp-0-8-protocol
dependency。我也用替换Authenticationprovider
了PLAIN
。这足以使我的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)上侦听。显然,这对于自动化测试不是最佳选择,因此我正在寻找以下一种可能性(或更好的一种):
SystemLauncher
似乎没有提供任何查询方式。java ×7
spring ×3
eclipse ×1
eclipse-mars ×1
generics ×1
java-8 ×1
jpa ×1
mockito ×1
predicate ×1
qpid ×1
rabbitmq ×1
sonarqube ×1
spring-data ×1
subclipse ×1
testing ×1
ubuntu-12.04 ×1
unit-testing ×1