Mockito提供:
when(mock.process(Matchers.any(List.class)));
Run Code Online (Sandbox Code Playgroud)
如何避免警告,如果process需要List<Bar>呢?
有没有办法匹配以下示例例程的任何类参数?
class A {
public B method(Class<? extends A> a) {}
}
Run Code Online (Sandbox Code Playgroud)
无论传递哪个类,我怎么能总是返回?以下尝试仅适用于匹配的特定情况.new B()methodA
A a = new A();
B b = new B();
when(a.method(eq(A.class))).thenReturn(b);
Run Code Online (Sandbox Code Playgroud)
编辑:一个解决方案是
(Class<?>) any(Class.class)
Run Code Online (Sandbox Code Playgroud) 假设我有一个文件,该文件包含:
HelloxxxHelloxxxHello
Run Code Online (Sandbox Code Playgroud)
我编译一个模式来寻找'你好'
Pattern pattern = Pattern.compile("Hello");
Run Code Online (Sandbox Code Playgroud)
然后我使用输入流来读取文件并将其转换为String,以便可以对其进行重新编码.
一旦匹配器在文件中找到匹配项,它就表明了这一点,但它没有告诉我它找到了多少匹配项; 只是它在String中找到了匹配项.
因此,由于字符串相对较短,并且我使用的缓冲区是200字节,因此它应该找到三个匹配项.但是,它只是简单地说匹配,并没有向我提供有多少匹配的计数.
计算String中发生的匹配数的最简单方法是什么.我已经尝试了各种for循环并使用matcher.groupCount(),但我无处可去.
有谁知道如何在ScalaTest中显示自定义失败消息?
例如:
NumberOfElements() should equal (5)
Run Code Online (Sandbox Code Playgroud)
失败时显示以下消息:
10不等于5
但我想要更多描述性的消息,如:
NumberOfElements应为5.
我不太了解正则表达式,但我需要匹配一个简单的模式.以下应该返回true,
Pattern.matches("{\"user_id\" : [0-9]*}", inputLine)
Run Code Online (Sandbox Code Playgroud)
当inputLine是
{"user_id" : 34}
Run Code Online (Sandbox Code Playgroud)
但是,我得到了这个例外:
java.util.regex.PatternSyntaxException: Illegal repetition
{"user_id" : 24}
at java.util.regex.Pattern.error(Unknown Source)
at java.util.regex.Pattern.closure(Unknown Source)
at java.util.regex.Pattern.sequence(Unknown Source)
at java.util.regex.Pattern.expr(Unknown Source)
at java.util.regex.Pattern.compile(Unknown Source)
at java.util.regex.Pattern.<init>(Unknown Source)
at java.util.regex.Pattern.compile(Unknown Source)
at java.util.regex.Pattern.matches(Unknown Source)
at org.whispercomm.manes.server.http.IntegrationTest.createUser(IntegrationTest.java:173)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:30)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50) …Run Code Online (Sandbox Code Playgroud) 我对匹配者比较陌生.我正在和Hamcrest一起玩 JUnit并且我喜欢它.
有没有办法说明多种选择中的一种是正确的?
就像是
assertThat( result, is( either( 1, or( 2, or( 3 ) ) ) ) ) //does not work in hamcrest
Run Code Online (Sandbox Code Playgroud)
我正在测试的方法返回一个集合的一个元素.该列表可能包含多个候选人.我当前的实现返回第一个命中,但这不是必需的.如果返回任何可能的候选人,我希望我的测试用例成功.你会怎么用Java表达这个?
(我对hamcrest替代品持开放态度)
我想在功能规范中提交表单时检查模型中的许多更改.例如,我想确保用户名从X更改为Y,并且加密密码已更改为任何值.
我知道已经有一些问题,但我找不到合适的答案.最准确的答案似乎ChangeMultiple是迈克尔约翰斯顿的匹配器:RSpec有可能期望两个表的变化吗?.它的缺点是只检查从已知值到已知值的显式变化.
我创建了一些关于我认为更好的匹配器看起来如何的伪代码:
expect {
click_button 'Save'
}.to change_multiple { @user.reload }.with_expectations(
name: {from: 'donald', to: 'gustav'},
updated_at: {by: 4},
great_field: {by_at_leaset: 23},
encrypted_password: true, # Must change
created_at: false, # Must not change
some_other_field: nil # Doesn't matter, but want to denote here that this field exists
)
Run Code Online (Sandbox Code Playgroud)
我还创建了ChangeMultiple匹配器的基本骨架,如下所示:
module RSpec
module Matchers
def change_multiple(receiver=nil, message=nil, &block)
BuiltIn::ChangeMultiple.new(receiver, message, &block)
end
module BuiltIn
class ChangeMultiple < Change
def with_expectations(expectations)
# What to do …Run Code Online (Sandbox Code Playgroud) 为什么这不编译,哦,该怎么办?
import static org.junit.Assert.assertThat;
import static org.junit.matchers.JUnitMatchers.hasItems;
ArrayList<Integer> actual = new ArrayList<Integer>();
ArrayList<Integer> expected = new ArrayList<Integer>();
actual.add(1);
expected.add(2);
assertThat(actual, hasItems(expected));
Run Code Online (Sandbox Code Playgroud)
从评论中复制的错误:
cannot find symbol method assertThat(java.util.ArrayList<java.lang.Integer>, org.hamcreset.Matcher<java.lang.Iterable<java.util.ArrayList<java.lang.Integer>>>)
Run Code Online (Sandbox Code Playgroud) 直接来自这个 Java Oracle教程:
两个星号**的作用类似于*但跨越目录边界.此语法通常用于匹配完整路径.
有人可以做一个真实的例子吗?他们对"十字架目录边界"有什么意义?穿过目录边界,我想象从root到文件检查getNameCount()-1.再来一个真实的例子解释在*和**的区别做法将是巨大的.
我正在尝试为通话创建一个模拟器.说我有这个方法我试图存根:
class ClassA {
public String getString(String a) {
return a + "hey";
}
}
Run Code Online (Sandbox Code Playgroud)
我想嘲笑的是:第一个例子是
when(classA.getString(eq("a")).thenReturn(...);`
Run Code Online (Sandbox Code Playgroud)
在同一测试案例中
when(classA.getString([anything that is not a])).thenReturn(somethingelse);
Run Code Online (Sandbox Code Playgroud)
第二个案例是我的问题:我如何匹配anyString()"a"以外的其他?