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

使用 Junit 对边缘情况进行单元测试

使用 Junit 对边缘情况进行单元测试

BIG阳 2021-08-04 10:18:35
我有一个名为StringProcessor. 其中的breakLongWords()方法,只要字符序列缺少预定义长度的空格,就会向输入添加零宽度空格:public class StringProcessor {    private static final int WORD_MAX_LENGTH = 40;    public String breakLongWords(CharSequence input) {        // add a zero-width space character after a word        // if its length is greater than WORD_MAX_LENGTH and doesn't have any space in it    }}static 字段WORD_MAX_LENGTH是一个实现细节,不应暴露给其他类(包括测试类)。现在,如何在不访问 JUnit 的情况下测试边缘情况WORD_MAX_LENGTH?例如:@Testpublic void breakLongWords_EdgeCase() {    String brokenText = stringProcessor.breakLongWords            ("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"); // its length should be = WORD_MAX_LENGTH     assertEquals(41, brokenText.length()); // 41 (WORD_MAX_LENGTH + 1) is also hard-coded here}
查看完整描述

3 回答

?
慕码人2483693

TA贡献1860条经验 获得超9个赞

通常这些字段被设置为“包私有”(即没有访问修饰符)并且单元测试被放置在同一个包上。
所以常量对于来自同一个包的测试和类是可见的,而对于其他的则是隐藏的。


查看完整回答
反对 回复 2021-08-04
?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

你有两个选择:

  1. 暴露WORD_MAX_LENGTH在你的测试中。

  2. 为测试保持第二个常数。


查看完整回答
反对 回复 2021-08-04
?
开心每一天1111

TA贡献1836条经验 获得超13个赞

我可能会重新设计 StringProcessor 和测试。


public class StringProcessor {


    private static final int WORD_MAX_LENGTH = 40;


    public boolean stringLengthIsSafe(CharSequence input){

        if(input.length()>WORD_MAX_LENGTH){

           return false;

        }

        return true;

    }


    public String breakLongWords(CharSequence input) {

        // add a zero-width space character after a word

        // if its length is greater than WORD_MAX_LENGTH and doesn't have any space in it

    }

}

然后测试布尔值。


@Test

public void breakLongWords_EdgeCase() {

    boolean safeString = stringProcessor.stringLengthIsSafe

            ("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"); // its length should be = WORD_MAX_LENGTH 


    assertEquals(true, safeString); // 41 (WORD_MAX_LENGTH + 1) is also hard-coded here

}

在您的最终实现中,breakLongWords 可以在尝试对 CharSequence 进行任何操作之前实现 stringLengthIsSafe。


查看完整回答
反对 回复 2021-08-04
  • 3 回答
  • 0 关注
  • 177 浏览

添加回答

举报

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