使用Dates和时有一种奇怪的怪异Calendar.要点是我想创建一个特定的日期,例如
Calendar cal = Calendar.getInstance();
cal.set(1970, 0, 1, 0, 0, 0);
Date date = cal.getTime();
Run Code Online (Sandbox Code Playgroud)
现在的问题是:它显示了正确的日期,但是在调试时我在日期变量下看到例如"fasttime" -3599459.这使我的JUnit测试失败,因为期望的值是-3600000.似乎日历增加了541毫秒或类似于初始化时...
问题是:是不是可以简单地创建一个固定的日期而不是'我在后台'鬼功能中添加几毫秒?
我目前在JUnit测试中遇到困难,需要一些帮助.所以我用静态方法得到了这个类,它将重构一些对象.为简化起见,我举了一个小例子.这是我的工厂类:
class Factory {
public static String factorObject() throws Exception {
String s = "Hello Mary Lou";
checkString(s);
return s;
}
private static void checkString(String s) throws Exception {
throw new Exception();
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的Test类:
@RunWith(PowerMockRunner.class)
@PrepareForTest({ Factory.class })
public class Tests extends TestCase {
public void testFactory() throws Exception {
mockStatic(Factory.class);
suppress(method(Factory.class, "checkString"));
String s = Factory.factorObject();
assertEquals("Hello Mary Lou", s);
}
}
Run Code Online (Sandbox Code Playgroud)
基本上我试图实现的是私有方法checkString()应该被抑制(因此不抛出异常),并且还需要验证方法checkString()实际上是在方法factorObject()中调用的.
更新:使用以下代码正确抑制:
suppress(method(Factory.class, "checkString", String.class));
String s = Factory.factorObject();
Run Code Online (Sandbox Code Playgroud)
...但是它为String"s"返回NULL.这是为什么?
是否可以在同一个类中获取另一个方法的名称但不使用手动编写的字符串?
class MyClass {
private void doThis()
{
// Wanted something like this
print(otherMethod.name.ToString());
}
private void otherMethod()
{
}
}
Run Code Online (Sandbox Code Playgroud)
你可能会问为什么:原因是我必须稍后像这个Invoke("otherMethod")一样调用该方法,但是我不想自己对这个字符串进行硬编码,因为我无法在项目中重构它.
我对如何在脚本中编写参数和参数的用法文本感到困惑.无论我在哪里,它总是与众不同.特别是描述参数的方式及其语法各不相同.
例如,用于需要带文件名的标志的参数
$0 -f <filename>
$0 [-f filename]
$0 [-f] <filename>
$0 [-f] [filename]
$0 [-f <filename>]
$0 [-f] [<filename>]
Run Code Online (Sandbox Code Playgroud)
例如,用于可选参数(-f,-g,-h)
$0 [-fgh]
$0 [<optional>]
$0 [-[fgh]]
$0 [-<fgh>]
$0 -fgh
$0 -[fgh]
Run Code Online (Sandbox Code Playgroud)
等等
这可能是一个小问题,但很烦人,因为语法总是不同的,有时它实际上意味着不同的东西,但你看不到它,因为它不遵循任何约定.您对此有何看法?使用适当的语法编写使用文本的最佳做法是什么?
亲爱的stackoverflow同志,我再次遇到一个问题,让特定的PowerMock/Mockito案例工作.问题是,我需要验证私有静态方法的调用,该方法是从公共非静态方法调用的.我之前发布的一个类似的例子如何抑制和验证私有静态方法调用?
这是我的代码:
class Factory {
public String factorObject() throws Exception {
String s = "Hello Mary Lou";
checkString(s);
return s;
}
private static void checkString(String s) throws Exception {
throw new Exception();
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的测试类:
@RunWith(PowerMockRunner.class)
@PrepareForTest(Factory.class)
public class Tests extends TestCase {
public void testFactory() throws Exception {
Factory factory = mock(Factory.class);
suppress(method(Factory.class, "checkString", String.class));
String s = factory.factorObject();
verifyPrivate(factory, times(8000)).invoke("checkString", anyString());
}
}
Run Code Online (Sandbox Code Playgroud)
这里的问题是,测试是成功的,但它不应该.它不应该是因为私有静态方法应该被正确调用1次.但无论我在时间()中放置什么价值,它总是验证它是真的...... halp :(
java ×3
powermock ×2
c# ×1
calendar ×1
conventions ×1
date ×1
invoke ×1
junit ×1
method-names ×1
mockito ×1
non-static ×1
shell ×1
suppress ×1
text ×1
verify ×1