为了外部化用户界面字符串,我们使用支持的“消息类”方法,例如在Eclipse和其他IDE中。这种方法要求在每个需要一些用户界面字符串的包中,必须有一个类“消息”,该类提供一个静态方法String getString(key)
,通过该方法可以获得实际的字符串以显示给用户。使用Java的资源机制在内部访问/获取字符串以实现国际化。
特别是在一些重构之后,我们一次又一次地从一个类中意外导入来自不同包的消息。
因此,我想创建一个archunit规则,检查我们是否只访问来自同一个包的名为“Messages”的类。一、 e.如果包x.y.z与当前类(即包含导入的类)不同,则类x.y.z.Messages的每次导入都是错误的
我到这里为止:
@ArchTest
void preventReferencesToMessagesOutsideCurrentPackage(JavaClasses classes) {
ArchRule rule;
rule = ArchRuleDefinition.noClasses()
.should().accessClassesThat().haveNameMatching("Messages")
.???
;
rule.check(classes);
}
但现在我被困在???。一个短语“condition”和引用/导入的类“Messages”怎么可能与该类不在同一个包中?
我不知何故迷路了所有这些archunit方法,这些方法似乎都不适合这里,也不适合组成上述条件。也许我只是看不见森林,因为有很多树。有任何建议或指导吗?
您需要对JavaAccess
的实例进行操作以验证依赖关系。JavaAccess
提供有关调用者和目标的信息,以便您可以根据两个类的包名称动态验证访问。
DescribedPredicate<JavaAccess<?>> isForeignMessageClassPredicate =
new DescribedPredicate<JavaAccess<?>>("target is a foreign message class") {
@Override
public boolean apply(JavaAccess<?> access) {
JavaClass targetClass = access.getTarget().getOwner();
if ("Message".equals(targetClass.getSimpleName())) {
JavaClass callerClass = access.getOwner().getOwner();
return !targetClass.getPackageName().equals(callerClass.getPackageName());
}
return false;
}
};
ArchRule rule =
noClasses().should().accessTargetWhere(isForeignMessageClassPredicate);
在ArchUnit-Test中,是否有可能从分层测试条件中排除特定的类? 希望我能说清楚...
我编写了我的第一个ArchUnit测试: 这个项目是用Maven构建的,所以类在不同的目录中。 将名称以“tests”或其他东西结尾的类分开是不够的,因为有许多类不是测试,而是只存在于测试类路径中。
在我的根项目中,我有两个子项目具有这种包结构。 在项目1中,我有一个用大规定义的类,就像这样 问题是,如果我运行该测试,它也会分析项目2中的所有内容。我如何排除包com.app.api?
我想在我的项目中测试特定的测试类,因为有很多测试类失败,我只想一次测试一个类。 我在以下文件夹中创建了测试类: 因此,我尝试了以下命令,但均无效: = 有什么帮助吗?谢谢
我的项目有两个OSGi包(A和B),它们需要使用不同版本的-A需要1.1.0版本,而B需要1.1.1版本。 如果我在这个sling.properties文件中给出的javax.activation的版本大于1.1.1,那么a和B都使用系统版本(尽管文件中指定了import-packages的版本);但如果我给出的版本小于1.1.1,那么两个包都使用AEM提供的版本。 如何配置我的Bundle,以便
我有一个简单的类,它将数据写入CSV文件: 我想知道如何测试这个类中包含的方法。我发现信息表明这可以通过使用Mockito来实现。是这样吗?我该怎么做呢?