为了账号安全,请及时绑定邮箱和手机立即绑定

请问如何对子方法中的对象进行mock?

请问如何对子方法中的对象进行mock?

慕田峪9158850 2019-08-20 18:14:51
如何对子方法中的对象进行mock
查看完整描述

4 回答

?
www说

TA贡献1775条经验 获得超8个赞

在进行对象方法的引用时,方法中参数的个数,参数的数据类型与原方法中定义的要一致,否则编译器会出错。注意构造方法后面括号内带几个参数或者不带参数

查看完整回答
反对 回复 2019-08-24
?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

看你的mysql当前默认的存储引擎:
mysql> show variables like '%storage_engine%';

你要看某个表用了什么引擎(在显示结果里参数engine后面的就表示该表当前用的存储引擎):
mysql> show create table 表名;

查看完整回答
反对 回复 2019-08-24
?
慕姐8265434

TA贡献1813条经验 获得超2个赞

mock测试方法用于构造对象,而不是你说的方法
比如,你现在要调用数据库,但这块也许还没完成,无法用orm框架进行映射,你就可以先new一些这样的对象,将它们保存或当作参数传入等
比如某接口中(UserDao)你有一个方法叫:queryUser(String name),但你的真正实现未完成,你就可以先写一个Mock类,MockUserDaoImpl
queryUser(String name){
User user = new User();
user.setName...
user.setPassword...
}

你说的两种方法,不需要mock,直接调用方法,传入参数,然后利用断言
assert*

查看完整回答
反对 回复 2019-08-24
?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

因为Mockito使用继承的方式实现mock的,用CGLIB生成mock对象代替真实的对象进行执行,为了mock实例的方法,你可以在subclass中覆盖它,而static方法是不能被子类覆盖的,所以Mockito不能mock静态方法。
但PowerMock可以mock静态方法,因为它直接在bytecode上工作,类似这样:
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.testng.PowerMockTestCase;
import org.testng.Assert;
import org.testng.annotations.Test;
@PrepareForTest(AbstractAnimal.class)
public class AbstractAnimalTest extends PowerMockTestCase {
@Test
public void shouldGetMockedHello() {
PowerMockito.mockStatic(AbstractAnimal.class);
PowerMockito.when(AbstractAnimal.getHello()).thenReturn("Hello mocked animal world!");
String greetings = AbstractAnimal.getHello();
Assert.assertTrue(greetings.equals("Hello mocked animal world!"));
}
}



查看完整回答
反对 回复 2019-08-24
  • 4 回答
  • 0 关注
  • 1742 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信