- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在为 Apache Flink 1.4 中的 processElement
函数编写一些测试代码:
public class ProcessFunctionClass {
public void processElement(Tuple2<String, String> tuple2, Context context, Collector<Tuple2<String, String>> collector) {
// if the state is empty, start a timer
if (listState.get().iterator().hasNext() == false)
context.timerService().registerEventTimeTimer(1000);
listState.add("someStringToBeStored");
// ...
}
}
public class ProcessFunctionClassTest {
private ProcessFunctionClass processFunctionClass;
@Mock
private ListState<String> listState;
@Before
public void setUp() throws Exception {
processFunctionClass = new ProcessFunctionClass();
}
@Test
public void testProcessElement() {
ListState mockListState = mock(ListState.class);
Iterable mockIterable = mock(Iterable.class);
Iterator mockIterator = mock(Iterator.class);
MockitoAnnotations.initMocks(this);
when(tDPListState.get()).thenReturn(mockIterable);
when(tDPListState.get().iterator()).thenReturn(mockIterator);
when(tDPListState.get().iterator().hasNext()).thenReturn(false);
processFunctionClass.processElement(tuple2, context, collector);
// verify(...)
}
}
当我使用 IDE 进行调试时,就在进入 processElement()
方法之前,listState
不是 null
并且似乎有已成功模拟,但是当我到达 listState.get().iterator().hasNext()
时,listState
为 null
并且我收到 NullPointerException。我在这里做错了什么?
最佳答案
在ProcessFunctionClass
中,您有一个私有(private)listState
变量。在测试中,您创建一个完全不相关的 mockListState
变量并对其设置一些期望。
为了让您的测试正常工作,您必须提供一种方法(构造函数或 setter )将 ProcessFunctionClass.listState
设置为所需值(您的模拟列表状态)
最重要的是, MockitoAnnotations.initMocks(this);
在您的示例中似乎没有执行任何操作:您没有向我们显示任何用 @Mock
注释的字段或@InjectMocks
更新
您滥用了@Mock
注释。您应该将其放在测试类中,而不是放在被测类中。当放置在测试类中时,在调用 initMocks 后,将使用适当类型的模拟来初始化该字段。
你应该做什么:
MockitoAnnotations.initMocks(this);
,您将手动创建所有模拟。ProcessFunctionClass
中添加构造函数public ProcessFunctionClass(ListState<String> listState) {
this.listState = listState
}
var mockListState = mock(ListState.class);
var processFunctionClass = new ProcessFunctionClass();
关于java - 在 Apache Flink 1.4 中模拟 ListState,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62444776/
我正在实现具有大状态(可能不适合内存)的自定义运算符。为此,我正在尝试使用 ListState。 我在用 checkpointedState = context.getOperatorStateSto
我们有一个包含交易的非键控数据流和一个包含规则的广播流。事实上,我们希望根据最后看到的规则来处理交易。如果我们最后看到的规则是每日,我们必须将当前交易添加到每日TrnsList。此外,如果 daily
我希望 RecyclerView 在设备旋转时保留其位置。 我有 4 个类(2 个 Activity 和 2 个 ViewModel),名称为 MainActivity , FavouritesAct
我正在为 Apache Flink 1.4 中的 processElement 函数编写一些测试代码: public class ProcessFunctionClass { public v
我是编程新手。我对上面的过滤器错误有疑问。 我收到如下所示的错误。我已经尝试了几个星期,但仍然不知道如何解决它。 Too many arguments for public constructor a
截至Jetpack Compose 1.0.0-alpha09 LazyColumn , LazyColumnForIndexed ,并且不推荐使用行对应项。 LazyColumn怎么样使用过、在哪里
我是一名优秀的程序员,十分优秀!