- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个枚举,它必须有一个用于 Bean 注入(inject)的内部静态类。
我觉得我面临着模拟最困难的情况:枚举,静态类,静态字段,静态方法..
public enum Category{
C1(Something(Constants.getFactory().createSomething(""))),
C2(...);
public static Constants {
@Autowired
private static Factory factory;
public static Factory getFactory(){
return factory;
}
}
}
我使用 PowerMockito 的测试类是:
@RunWith(PowerMockRunner.class)
@PrepareForTest({Category.class,Category.Constants.class})
public class CategoryTests {
@Before
public void setUp() throws Exception {
PowerMockito.mockStatic(Category.class);
PowerMockito.mockStatic(Category.Constants.class);
//This simply testing mock didn't work
//PowerMockito.when(Category.Constants
// .getFactory()).thenReturn("123");
//I tried to mock the inner field 'factory' and use it directly without a getter
//(with small changes in the original class)
//But it didn't work either
Factory factory = PowerMockito.mock(Factory.class);
NewClass newClass = PowerMockito.mock(NewClass.class);
PowerMockito.when(Factory.createSomething(anySring()))
.thenReturn(newClass);
Whitebox.setInternalState(
Category.Constants.class,"factory",Factory);
//This is like the most common way to stub
//It didn't work, so I believe the inner static class were never mocked
PowerMockito.doReturn(factory).when(Category.Constants.class,
"getFactory", anyString());
}
//I don't know if real test cases matter that much but I update to add it for reference.
@Test(dataProvider = "Case1")
public void testFromFilterType(final String testName, String input, final Category expected) {
assertEquals(Category.doSomething(input), expected);
}
@DataProvider(name = "Case1")
Object[][] fromFilterTypeCases() {
return new Object[][] {
{ "C1", "input1", Category.C1 },
{ "C2", "input2", Category.C2 },
};
}
}
//Currently the tests got skipped because in class Category Constants.getFactory().createSomething(""),
//where Constants.getFactory() returns null and mocking doesn't work.
起初我没有模拟 Enum,而只是模拟静态内部类。经过一番苦苦寻找,我尝试了各种方法。设置看起来是正确的,但可能会遗漏一些技巧。有什么帮助吗?
最佳答案
一点猜测:Category.class
是您要测试的类。该类本身不包含任何需要模拟/准备的内容。所以:将这些部分放入您的代码中。即使它不会导致您当前的问题,我也很确定当您稍后开始测试时它可能会产生各种不良后果。
除此之外,真正的答案是首先避免使用 PowerMock(ito) 的必要性。您已经在使用 @Autowired,这意味着您正在使用 DI 框架。大多数 DI 框架也有用于单元测试的钩子(Hook)。因此,您应该尝试让 @Autowired 在您的测试设置中工作。
关于java - PowerMockito 模拟静态类 INSIDE 枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52320167/
假设我有一个表 A 和其中的函数 C 和 B,我可以通过引用自身来调用函数 C 中的表 A 函数 B 吗? A = { B = function() print("I am B
下面的代码 class Foo: bar=[sum( i^j for i in range(9) )for j in range(9)] 加注 NameError: global name '
Column( mainAxisSize: MainAxisSize.min, children: [ Container(
我正试着将按钮宽度扩展到卡内的行间,但都不起作用。我甚至不明白它为什么要断开,它说它在框约束中断开,因为它有无限的宽度
我正试着将按钮宽度扩展到卡内的行间,但都不起作用。我甚至不明白它为什么要断开,它说它在框约束中断开,因为它有无限的宽度
我正在尝试实现一个矩阵框,为了让它工作,我必须在另一个 vector 内的一个 vector 内使用一个集合。 vector > > matrix; 但是我必须在构造函数中设置 vector 的大
我在这里找到了一个类似的问题,但没有对我有用的答案: System Clipboard Vim within TMUX within SSH session 我正在使用 Gnome 终端启动 ssh
这是我的方法: 我有一个自定义 ListView,其中包含一个包含两种不同类型 View 的自定义适配器。其中之一在每个 View 中都有一个 CheckBox。 我只想在单击其中一个复选框时通知 A
我正在尝试访问一个框架内的控件,该框架位于另一个框架内的框架内。 最后(最深的)框架仅用于登录 - 我设法做到了。 问题是登录后我基本上需要回到上框点击一个按钮。出于某种原因,我不断收到错误消息: N
我一直在阅读我能找到的关于 jsoup 和属性、类、跨度等的所有问题。但是没有一个能帮助我从这个网站获取这些数据。 我正在开发一些体育软件并从网站 soccer24.com 检索比赛数据 现在我想从特
我正在尝试在神社中创建以下循环: variable: > [ {% for replaceme in list %} { 'name': "{{ "string-{{r
我正在尝试使用 jQuery Lazy Load插件,但它说 You can also use plugin for images inside scrolling container, such a
我想把来自 JTable 的对象放在它上面,所以使用 JLayeredPane 似乎很自然。然而,让它正确地绘制,正确地做标题等是非常困难的。我该怎么做才能: 滚动时显示行标题并匹配 列标题在滚动时显
背景:这是我第一次在这里发布问题,但我从阅读他人的问题和答案中学到了很多东西,非常感谢您的所有帮助!我花了几个小时研究这个问题,但找不到适合我的解决方案。下面的示例来自 MySQL website到目
我有一些代码 function getSomeInfoFromDB() { let promises = []; let order = []; $("tr").each(fu
给定相同数量的数组/对象层,每个索引指示相同的内容,嵌套数组和对象的最佳顺序是什么? 我正在制作一个基于网格的游戏,我需要存储有关每个方 block 的几条信息。我知道无法绕过多个级别的数组/对象。我
我有 3 个这样的类: public class Subject { String name; ArrayList teachers; public Subject(Strin
我总是难以混合语言,最近我开始使用 MYSQL。在这种情况下,我有这段代码: 我需要它来打印图像而不是它正在打印的链接。 http://www.google.com/s2/favicons?doma
我查看了多个数据库,但没有找到匹配或适用于我的场景的答案,所以我求助于专家,或者至少是更有经验的专家。我对 HTML 和 CSS 相当陌生。我正在尝试弄清楚如何在 ul 中定位 li,即在 ul 下的
我是一名优秀的程序员,十分优秀!