我有一堆@ParameterizedTest从 a 接收参数的s@MethodSource具有非常详细的toString()结果(例如 Selenium 的WebDriver)。这些默认情况下用于组成相应的显示名称。从JUnit 5 用户指南:
默认情况下,参数化测试调用的显示名称包含调用索引和该特定调用的所有参数的字符串表示。但是,您可以通过注释的
name属性自定义调用显示名称@ParameterizedTest[…]
虽然这允许在一定程度上自定义显示名称,但似乎我无法调整各个参数的字符串表示形式。不幸的是,指定生成器@DisplayNameGeneration只能在类级别应用,并且不会影响参数化测试调用的显示名称。
有没有办法使用DisplayNameGeneratorfor@ParameterizedTest或自定义给定参数的字符串表示?
我想以编程方式确定从当前窗口中的一个Swing组件(拥有焦点)转到另一个组件所需的键盘笔划数(无论是否有制表符和/或箭头键).每个笔画应增加1的距离; 如果无法访问该组件,则结果应为-1.
由于我无法找到实用方法,我想到了以下签名:
public static int getFocusTraversalDistance( Component from, Component to )
Run Code Online (Sandbox Code Playgroud)
天真,我刚刚接到启动Container的from通过getFocusCycleRootAncestor().然后,我将分别使用FocusTraversalPolicywith getFocusTraversalPolicy()和循环遍历组件.getComponentAfter(Container, Component)getComponentBefore(Container, Component)
但是,我不熟悉Swing/AWT焦点子系统,我想知道是否有更优雅的方式?
我需要这些信息的原因是我的硕士论文,我正在撰写.这个想法是通过机器学习来增强基于GUI的猴子测试.训练模型不是挑选随机组件,而是尝试根据历史用户/测试人员痕迹"推荐"组件.我正在使用的一个功能是前一个目标组件和一个可能的目标组件之间的焦点遍历距离.
感谢camickr的宝贵意见,我目前正在使用以下算法:
public static int getFocusTraversalDistance( Component from, Component to ) {
if ( from.equals( to ) ) {
return 0;
}
final Container root = from.getFocusCycleRootAncestor();
if ( root == null ) {
return -1;
}
final FocusTraversalPolicy policy = root.getFocusTraversalPolicy();
final HashSet<Component> visited = new …Run Code Online (Sandbox Code Playgroud) 大部分时间Markdown文件都被视为源代码:它们在VCS中,它们参与拉取请求和/或评论,并且格式良好.就像在源代码中一样,我经常看到在特定长度插入的换行符 - 就像代码格式化程序一样.
许多编辑器根据当前窗口大小动态执行此操作.此外,Markdown主要用于生成HTML页面,PDF文档或其他格式.在这些情况下,手动插入的换行符通常会导致文本渲染混乱.
那么,将Markdown包装在特定的线长度某种反模式还是我错过了什么?
编辑:整个主题似乎是有争议的.即使是当前的CommonMark规范(v0.26)也有一定的范围:
没有前面有两个或多个空格或反斜杠的常规换行符(不在代码范围或HTML标记中)被解析为softbreak.(软件破解可以在HTML中呈现为行结尾或空格.结果在浏览器中将是相同的.在此处的示例中,将使用行结尾.)
[...]
符合标准的解析器可以在HTML中呈现换行符,作为换行符或空格.
渲染器还可以提供将软线断开渲染为硬换行的选项.
"一个或多个连续文本行"规则的含义是Markdown支持"硬包装"文本段落.这与大多数其他文本到HTML格式化程序(包括Movable Type的"转换换行符"选项)明显不同,后者将段落中的每个换行符转换为
<br />标记.当您确实想要
<br />使用Markdown 插入break标记时,您将结束包含两个或更多空格的行,然后键入return.是的,这需要更多的努力来创建一个
<br />,但是一个简单的"每个换行是一个<br />"规则对Markdown不起作用.当您使用硬中断格式化时,Markdown的电子邮件风格的区块报价和多段列表项目效果最好 - 看起来更好.
我正在尝试开始使用Jenetics JAVA库进行遗传算法,而且我的GA有限背景中有一些我不理解的东西;
据我所知,GA生成了一组m元素阵列,其中每个数组都是一个可以评估的潜在解决方案,一旦评估,潜在的解决方案就会被排序,最好的选择是为了创建一个新的人口,等等.但我发现Jenetics中的解决方案(基因型)是一个数组列表,其中每个数组都是我理解的潜在解决方案,每个数组也可以有不同的长度,我不明白为什么要使用这个结构而不是基因载体.
参见手册第6页,第3.1.3节.
如果可能的话我想知道为什么会这样.我希望这个问题足够明确.
我想知道在 ND4J/DL4J 中重用标准化器的正确方法是什么。目前,我将其保存如下:
final DataNormalization normalizer = new NormalizerStandardize();
normalizer.fit( trainingData );
normalizer.transform( trainingData );
normalizer.transform( testData );
try {
final NormalizerSerializer normalizerSerializer = new NormalizerSerializer();
normalizerSerializer.addStrategy( new StandardizeSerializerStrategy() );
normalizerSerializer.write( normalizer, path );
} catch ( final IOException e ) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
并通过以下方式加载:
try {
final NormalizerSerializer normalizerSerializer = new NormalizerSerializer();
normalizerSerializer.addStrategy( new StandardizeSerializerStrategy() );
final DataNormalization normalizer = normalizerSerializer.restore( path );
} catch ( final Exception e ) { // Throws Exception instead of IOException.
// …Run Code Online (Sandbox Code Playgroud) 考虑以下测试类:
public class SomeClass {
@Autowired
private SomeDependency someDependency;
public int inc(int i) {
someDependency.doSomething();
return i + 1;
}
}
Run Code Online (Sandbox Code Playgroud)
如何someDependency在JUnit 5(5.0.1)测试中为Spring Boot 2(2.0.0.M2)应用程序模拟(最好使用Mockito)?当我尝试调用SomeClass#inc(int)它时会产生一个NullPointerException因为没有注入自动连接的依赖项.
我想测试一个特定的方法是否可以毫无例外地处理一堆字符串。因此,我想使用 AssertJ 的软断言,例如:
SoftAssertion softly = new SoftAssertion();
for (String s : strings) {
Foo foo = new Foo();
try {
foo.bar(s);
// Mark soft assertion passed.
} catch (IOException e) {
// Mark soft assertion failed.
}
}
softly.assertAll();
Run Code Online (Sandbox Code Playgroud)
不幸的是,我必须分别使用 AssertJ 1.x 和 Java 6,所以我无法利用这一点:
assertThatCode(() -> {
// code that should throw an exception
...
}).doesNotThrowAnyException();
Run Code Online (Sandbox Code Playgroud)
有没有办法用 AssertJ(或 JUnit)做到这一点?
当我在一个项目上执行时release:prepare,它更改了 POM 的格式,这导致整个文件存在巨大差异(请参阅此提交)。我认为这与之前 POM 的格式化方式有关,我使用标准 Eclipse 格式化程序设置进行了格式化。
有没有办法告诉发布插件不要这样做?或者我应该更改格式化程序设置中的某些内容?
编辑:正如khmarbaise提到的,我混淆了 Linux 和 Windows EOL。然而,在我看来,发布插件不应该决定使用什么缩进以及在哪里换行。
我在Scala对象中定义了以下列表:
object Foo {
val bar = List(1, 2, 3)
}
Run Code Online (Sandbox Code Playgroud)
scala.collection.immutable.List<Object>当我尝试从Java使用它时,这似乎已成为一种情况。结果,我必须使用类似getter Foo.bar().apply$mcII$sp(i)或apply将其强制转换为Integer/ int。
为什么是泛型Object而不是Integer?对于以Java原语存在的类型,似乎也只有这种情况。List[MyType]进入List<MyType>Scala。
我们使用类似于系统规则的方法来处理JUnit 4测试中的(系统)属性.这样做的主要原因是在每次测试后清理环境,以便其他测试不会无意中依赖于可能的副作用.
自JUnit 5发布以来,我想知道是否有"JUnit 5方式"这样做?