- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在为下面的代码编写单元测试
public class Class1 {
protected void execute(String a, String b) {
try{
process(a,b);
}
catch(Exception E){
Class2.write(e,Class1.class.getSimpleName())
}
}
private void process(String a, String b) {
validate(a,b);
// Doing some processing on a and b values
}
private void validate (String a, String b) {
if(a==null || a.isEmpty() || b==null || b.isEmpty())
throw new IllegalArgumentException("Input value cannot be null or empty");
}
}
对于上面的代码,我正在尝试编写一个涵盖异常用例的UT。下面是我的UT代码,
@Test
public void test1(){
try {
PowerMockito.mockStatic(Class2.class);
PowerMockito.when(Class2.class, "write", Mockito.anyObject(), Mockito.anyString())
.thenCallRealMethod();
Class1 class1 = new Class1();
Class2.write(new IllegalArgumentException("Input value cannot be null or empty"),Class1.class.getSimpleClassName());
PowerMockito.verifyStatic(Class2.class, VerificationModeFactory.times(1));
class1.execute(Mockito.anyString(),Mockito.anyString());
} catch (Exception e) {
e.printStackTrace();
Assert.fail(e.getMessage());
}
}
当我执行上述测试时,出现以下异常
Argument(s) are different! Wanted:
Class2.write{
java.lang.IllegalArgumentException:Input value cannot be null or empty,
Class1
}
Actual invocation has different arguments:
Class2.write{
java.lang.IllegalArgumentException:Input value cannot be null or empty,
Class1
}
有人可以帮我解决这个问题吗?我非常感谢您的帮助和时间
提前致谢
最佳答案
IllegalArgumentException
不使用字符串消息来实现相等。测试字符串消息或类类型会更安全。我更希望测试检测类型而不是消息,因为字符串消息不应该用于控制流,它是一个实现细节。
System.out.println(Objects.equals(
new IllegalArgumentException(),
new IllegalArgumentException()));
// false
System.out.println(Objects.equals(
new IllegalArgumentException().getClass(),
new IllegalArgumentException().getClass()));
// true
所以为了模拟这个我会使用匹配器:
any(IllegalArgumentException.class), eq(Class1.class.getSimpleName())
<小时/>
我将以反对此代码的结构的争论结束,因为它不是围绕依赖注入(inject)构建的。您可以调用实例方法,而不是调用静态方法 Class2::write
。
例如创建接口(interface):
public interface Writer {
void write(Exception e, String source);
}
您现在可以重构该类以提供两个构造函数,一个接受任何编写器,另一个默认为 Class2
。
public class Class1 {
private final Writer writer;
public Class1() {
this(Class2::write);
}
public Class1(Writer writer) {
this.writer = writer;
}
protected void execute(String a, String b) {
try {
process(a,b);
}
catch (Exception E) {
writer.write(e, Class1.class.getSimpleName());
}
}
...
}
使用此策略,您现在可以简单地创建 Writer
的实例模拟。这避免了必须模拟为静态方法,从而更改应用程序的字节码,并且还使您的类更加灵活,因为它现在可以支持许多不同的编写器实现。任何修改应用程序字节码的内容都应该非常谨慎地使用,例如替换静态方法调用,并不能真正验证代码的运行时执行。
在我看来,大多数 PowerMockito/PowerMock 仅有助于验证未考虑到可测试性/灵 active 而构建的代码。您不需要使用 Mockito/EasyMock 工具集之外的任何内容来获得结构良好的代码。有一些异常(exception),但应该非常谨慎地使用工具集。
关于java - 论据不同!通缉:,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58480098/
我正在为下面的代码编写单元测试 public class Class1 { protected void execute(String a, String b) { try{
我想在Dart编辑器中使用一些UXL。恐怕我觉得UXL Overview上的示例代码已经过时或缺少一些关键的步骤来执行它。 (另请参见:What is Rikulo dart really?,它将人们
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我正在JUnit中测试Restful端点,并在 在save方法中作为参数存在的列表, **"Argument(s) are different! Wanted:"** save( "121", [co
我正在阅读很多关于 Cuckoo hashing 的 SO 答案. 有人知道 C# 中 Cuckoo 的良好实现吗? 最佳答案 如果您找到了 C 实现,那么将其转换为 C# 应该很简单......发布
我的问题可能是,“如何创建带有两个单行非环绕 TextView 的单行水平 LinearLayout,其中左侧 TextView 始终占据可用屏幕宽度的 1/3,右侧 TextView 始终占据 2/
有一个“API Monitor”程序,但似乎已停产。在我的系统上不起作用。有没有这样的工具,可以在 Windows 7 x64 上运行?我需要记录来自选定集合的 API 调用,最好是参数值。 最佳答案
我需要的是:绘图创建、插值的东西、计算诸如此类的东西 和 其中 L(x) 是从原始已知函数 f(x) 生成的一些数据(点)构建的插值。这意味着我们知道原始功能。我们有一个范围 (-a, a) - 已知
写累了 Pattern p = Pattern.compile(... Matcher m = p.matcher(str); if (m.find()) { ... 在我的代码中一遍又一遍。我
我有以下代码: class TimeOutException {}; template class MultiThreadedBuffer { public: MultiThreadedBu
我正在尝试用 C 语言实现一个单向链表。您在互联网上看到的一个常见实现类似于 typedef struct { int head; Node *tail; } Node; 用像这样的方法 No
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
服务类: public void createManualEvaluationReductionChangeHistory(Long key, String accountId, RegisterRe
我正在寻找一种方法来进行(实际上很常见)可视化,即通过一组 N 个象形图将 N 个单位的总体划分为几个类别 - 我更喜欢实心方块;在报纸等中,人们可能会看到很小的人形形状——每个象形图根据第 n 个单
我不确定这个问题的标题是否切中要点。我用 C C++ 为 Windows 编写了一个大型软件系统,并希望为该系统的用户提供向其添加编译代码的选项。用户应该能够执行基本操作,并与我的程序交换数据。 目前
我需要一个哈希算法,它接受一个字符串并返回一个可以存储在 UInt16 中的数字。 .我需要它来计算一个小的校验和数。 .Net 有这方面的算法吗? 最佳答案 也许您正在寻找crc16 . Here是
我用 Laravel 制作了页面,并使用一个漂亮的 URL 路由它们但是我正在开发一个房地产网站,我想要以下 URL显示一个房子信息的页面:houseinfo/{town}/{neighborhood
我有几个线程获取互斥量然后终止。 互斥量存储在主存储库中,并在程序存在时适当释放。但是,当分配互斥量的线程存在时,互斥量会自动释放,并随后获取 AbandonedMutexException(同样根据
我知道一些 Javascript,但才意识到我对跨浏览器问题知之甚少。 IE 中事件回调中的 this 对象(如 xhr.onreadystatechange = function () { ...
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 5 年前。
我是一名优秀的程序员,十分优秀!