gpt4 book ai didi

java - 如何模拟抽象类的抽象方法?

转载 作者:行者123 更新时间:2023-12-01 23:16:52 25 4
gpt4 key购买 nike

我有一个下面的方法,其中我使用此行 ProcBOF.getInstance().find 来获取一些数据。

  private static Map<Long, Long> getAll(Map<Long, Event> holder) throws FinderException {
Map<Long, Long> map = new HashMap<>();
if (holder.isEmpty()) {
return map;
}
Set<Long> items = holder.keySet();
long[] itemIds = Longs.toArray(items);
List<TeraBo> teraBos = TBOF.getInstance().findItemIdsIn(itemIds);
for (TeraBo tBo : teraBos) {
ProcessBo bo = ProcBOF.getInstance().find(tBo, holder.get(tBo.getItem().getId()).getDataId(), ReadSet.FULL, null);
bo.getVar();
map.put(tBo.getItem().getId(), bo.getVar());
}
return map;
}

现在我想模拟 ProcBOF 类的 find 方法,以便它可以返回一些虚拟 ProcessBo 对象,我们可以从中调用 getVar() 方法,但问题是 ProcBOF 是一个抽象类,而 find 是一个抽象方法,所以我无法理解如何模拟它抽象类的抽象方法。

public interface ProcessBo extends BOI {
//...
}

public abstract class ProcBOF extends BaseBof {
//...
public abstract ProcessBo find(TeraBo saleBo, long dataId, ReadSet readSet, Filter filter) throws FinderException;
}

最佳答案

你的实现有点奇怪,所以我不确定我是否能够正确地重现它(抽象类上的 getInstance() 方法很奇怪)。

但是,我认为像这样的东西应该可以工作:

import mockit.Expectations;
import mockit.Mocked;
import mockit.Tested;
import mockit.integration.junit4.JMockit;
import org.junit.runner.RunWith;

import java.util.HashMap;
import java.util.Map;

import static org.hamcrest.Matchers.*;
import static org.junit.Assert.*;

@RunWith(JMockit.class)
public class Test {

// Constants -----------------------------------------------------

// Attributes ----------------------------------------------------

/**Tested class*/
@Tested
private Foo foo;

/**Mocked so that all instances are a mock*/
@Mocked
private ProcBOF procBOF;

/**Mocked so that all instances are a mock*/
@Mocked
private ProcessBo processBo;

// Constructors --------------------------------------------------

// Static --------------------------------------------------------

// Public --------------------------------------------------------

@org.junit.Test
public void name() throws Exception {
// GIVEN
new Expectations() {{
// we mock the getInstance method and return always the mocked instance
ProcBOF.getInstance();
result = procBOF;

// we mock the find method and return the mocked process Bo
procBOF.find((TeraBo) any, 2L, ReadSet.FULL, null);
result = processBo;

// we also mock the getVar method
processBo.getVar();
result = "foo";
}};

// test data
Map<Long, Event> map = new HashMap<>();
map.put(1L, new Event());

// WHEN
// call the getAll method
Map<Long, Object> ret = foo.getAll(map);

// THEN
// we get the mocked value
assertThat(ret.get(1L), is("foo"));
}

// Package protected ---------------------------------------------

// Protected -----------------------------------------------------

// Private -------------------------------------------------------

// Inner classes -------------------------------------------------

}

关于java - 如何模拟抽象类的抽象方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58347133/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com