首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >try-finally块的单元测试

try-finally块的单元测试
EN

Stack Overflow用户
提问于 2014-06-18 19:42:03
回答 2查看 1.4K关注 0票数 0

我应该如何为getUrl方法编写测试?

代码语言:javascript
复制
public class UrlList {
    private final String[] urls;
    private int index;
    private SecureRandom random;

    public static enum Mode {
        VALUE_1,
        VALUE_2,
        VALUE_3;
    }

    public UrlList(String... urls) {
        if (urls == null || urls.length == 0) {
            throw new IllegalArgumentException("The url list may bot be null or empty!");
        }
        this.urls = urls;
        this.index = 0;
        this.random = new SecureRandom();
    }

    public String getUrl(Mode mode) {
        switch (mode) {
        case VALUE_1:
            return urls[0];
        case VALUE_2:
            return urls[random.nextInt(urls.length)];
        case VALUE_3:
            try {
                return urls[index];
            } finally {
                index = (index + 1) % urls.length;
            }
        default:
            throw new RuntimeException("Unknown mode!");
        }
    }
}

在上面的代码中,urls是一个字符串数组。

主要问题是我应该如何测试case VALUE_3:

因为第一次测试index = 0时,index的值将更改为finally块中的其他值,我希望在同一个单元测试类中使用新的index值再次测试它。

EN

回答 2

Stack Overflow用户

发布于 2014-06-18 20:11:03

您是否考虑过为每个测试方法创建一个新的类实例(封装索引和getUrl的实例)?因此,每种测试方法都是从index=0开始的。

票数 0
EN

Stack Overflow用户

发布于 2014-06-18 20:56:24

对于您的测试,您必须能够将私有index变量的值设置为(例如):

获得一个正值并且小于一个值来控制你得到index+1

  • url.length -1来控制你得到0

  • 一个错误的值(负数或大于或等于urls.length)来控制你得到一个可接受的值(在从异常中恢复后)

当然,索引是私有的,但您仍然可以通过reflexion进行访问

代码语言:javascript
复制
urlList = new UrlList(...); // in test initialization
...
Field index = UrlList.class.getDeclaredField("index");
index.setAccessible(true);
index.setInt(urlList, i); // to set index
i = index.getInt(urlList); // to get index
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24284629

复制
相关文章

相似问题

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