首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android:在使用接口测试类时提供模拟实现

Android:在使用接口测试类时提供模拟实现
EN

Stack Overflow用户
提问于 2015-09-19 19:15:34
回答 1查看 59关注 0票数 0

我有个接口

代码语言:javascript
复制
public interface Example{

public int sum(int a, int b);

public int diff(int a, int b);

}

现在我有了这个接口的实现:

代码语言:javascript
复制
public RealMath implements Example{

public int sum(int a, int b){
    //contact server do stuff and return value.
    return val;
}

public int diff(int a, int b){
    //contact server do stuff and return value.
    return val;
}
}

还有一家工厂提供相应的实现:

代码语言:javascript
复制
public class ExampleFactory(){
public static final Example getExampleIns(String val){
return new RealMath();
}
}

现在,我有一个类User.java,它在一些工作中使用这个Example接口。我想测试User,其中有一个方法调用:

代码语言:javascript
复制
Example ex = ExampleFactory.getExampleIns();
ex.sum(val1, val2); 

基于这个值,它做了一些处理。

我希望对我的代码进行单元测试,并希望有一个示例接口的模拟实现,这样就不需要服务器依赖项,我只是返回接口中的方法的一些模拟值。

我的想法是在调用ExampleFactory.getExampleIns();时(在运行测试用例时)提供模拟的实现。

我厌倦了Mockito (Android),它不支持静态方法模拟。

因此,我有两个问题: 1.如果我有一个工厂和各种实现并根据需求返回合适的对象,那么上面的设计有什么问题呢?

  1. 如何通过提供模拟的Example接口实现来测试Example

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-20 10:55:19

  1. 如果我有一个工厂和各种实现,并根据需求返回合适的对象,那么上面的设计有什么问题呢?

在工厂中交付的实现是硬编码的,因此,如果要更改实现,就必须更改代码。您没有办法动态地更改该进程。

2.-如何通过提供模拟实现(例如接口)来测试User.java?

不要使用工厂,而是使用依赖注入。您可以将Example的适当实现传递给构造函数中的User (例如),并将其存储为实例变量,以便以后可以使用它:

代码语言:javascript
复制
private Example exampleImpl;

public User(Example exampleImpl) {
    this.exampleImpl = exampleImpl;
}

public void methodUsingExample(Integer val1, Integer val2) {
    exampleImpl.sum(val1, val2);
}

在测试时,可以使用User模拟构建Example实例:

代码语言:javascript
复制
Example mockExample = mock(Example.class);
User user = new User(mockExample);
// now User is using your mock
user.methodUsingExample(1, 2);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32672240

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档