neo4j - 带有 lambda 表达式和消费者断言的 TestMethods 的 JQassistant 规则
问题描述
我们的项目很少有单元测试,其中断言作为 lambda 或消费者传递给测试类。示例如下。如何编写密码规则约束,例如识别断言并且不将方法标记为没有断言。当前使用 junit4:TestMethodWithoutAssertion
测试方法 :
@Test
public void testSuccessfulIdempotency(){
transportConsumerFlow.accept(Mockito.mock(TransRequest.class),
(t)->{
assertEquals(t, expectedResponseMessage);
});
}
在上面的示例中,断言实际上是存在且有效的。但是无法检测到 junit4:AssertMethod 的概念可能是因为它作为消费者存在,而不是在 Test 方法中直接调用。
解决方案
jQAssistant 目前没有明确支持 Lambda 表达式,但您可以使用以下概念将它们识别为合成静态方法(由字节码生成):
MATCH
(type:Type)-[:DECLARES]->(lambda:Method)
WHERE
exists(lambda.synthetic)
and exists(lambda.static)
and lambda.name starts with("lambda$")
SET
lambda:Lambda
WITH
type, lambda
MATCH
(type)-[:DECLARES]->(method:Method)
WHERE
method <> lambda
and method.firstLineNumber <= lambda.firstLineNumber
and method.lastLineNumber >= lambda.lastLineNumber
MERGE
(method)-[:DECLARES_LAMBDA]->(lambda)
RETURN
method, collect(lambda)
您不会看到从测试方法到 lambda 方法的任何 INVOKES 关系,因此需要使用具有以下密码查询的自定义约束(基于 junit4:TestMethodWithoutAssertion):
MATCH
(testType:Type)-[:DECLARES]->(testMethod:Test:Method)
WHERE
NOT (testMethod)-[:INVOKES|DECLARES_LAMBDA*..3]->(:Method:Assert)
RETURN
testType AS DeclaringType,
testMethod AS Method
推荐阅读
- excel - 用于从多个 csv 中选择特定列并导入到一个工作表的宏
- angular - Angular - 如何在数据网格中显示数组数组?
- windows - perl on Windows: Can't do inplace edit on file: File exists
- python - Keras 网络产生逆向预测
- javascript - 单击按钮时的中心 Div
- java - 如何将 ServerHttpRequest/ServerHttpResponse 正文转换为字符串
- javascript - How to merge object inside object
- r - 子集列表以提取多个元素
- uvm - If I have a fixed size array , how do I write a constraint so that each multi-bit element of the array after randomization is an odd number
- c# - Unity 游戏在 IOS 上崩溃,但在 Android 上完美运行