FuzzedDataProvider常用方法

FuzzedDataProvider 是 Jazzer 提供的一个接口,用于生成模糊测试数据。它包含多个方法,可以生成不同类型的数据。下面详细介绍这些方法及其参数和用法。

1. consumeBoolean()

  • 描述:生成一个布尔值。
  • 返回类型boolean
  • 示例
    boolean value = data.consumeBoolean();
    

2. consumeByte()

  • 描述:生成一个字节值。
  • 返回类型byte
  • 示例
    byte value = data.consumeByte();
    

3. consumeShort()

  • 描述:生成一个短整型值。
  • 返回类型short
  • 示例
    short value = data.consumeShort();
    

4. consumeInt()

  • 描述:生成一个整型值。
  • 返回类型int
  • 示例
    int value = data.consumeInt();
    

5. consumeLong()

  • 描述:生成一个长整型值。
  • 返回类型long
  • 示例
    long value = data.consumeLong();
    

6. consumeFloat()

  • 描述:生成一个浮点型值。
  • 返回类型float
  • 示例
    float value = data.consumeFloat();
    

7. consumeDouble()

  • 描述:生成一个双精度浮点型值。
  • 返回类型double
  • 示例
    double value = data.consumeDouble();
    

8. consumeString(int maxLength)

  • 描述:生成一个包含 ASCII 字符的字符串。
  • 参数maxLength - 生成字符串的最大长度。
  • 返回类型String
  • 示例
    String value = data.consumeString(50);
    

9. consumeAsciiString(int maxLength)

  • 描述:生成一个包含 ASCII 字符的字符串。
  • 参数maxLength - 生成字符串的最大长度。
  • 返回类型String
  • 示例
    String value = data.consumeAsciiString(50);
    

10. consumeRemainingAsString()

  • 描述:生成一个包含剩余所有数据的字符串。
  • 返回类型String
  • 示例
    String value = data.consumeRemainingAsString();
    

11. consumeRemainingAsString(Charset charset)

  • 描述:生成一个包含剩余所有数据的字符串,并使用指定的字符集。
  • 参数charset - 指定的字符集。
  • 返回类型String
  • 示例
    String value = data.consumeRemainingAsString(StandardCharsets.UTF_8);
    

12. consumeBytes(int maxLength)

  • 描述:生成一个字节数组。
  • 参数maxLength - 生成字节数组的最大长度。
  • 返回类型byte[]
  • 示例
    byte[] bytes = data.consumeBytes(100);
    

13. consumeRemainingAsBytes()

  • 描述:生成包含剩余所有数据的字节数组。
  • 返回类型byte[]
  • 示例
    byte[] bytes = data.consumeRemainingAsBytes();
    

14. consumeInt(int min, int max)

  • 描述:生成一个在指定范围内的整型值。
  • 参数min - 最小值,max - 最大值。
  • 返回类型int
  • 示例
    int value = data.consumeInt(1, 100);
    

15. consumeLong(long min, long max)

  • 描述:生成一个在指定范围内的长整型值。
  • 参数min - 最小值,max - 最大值。
  • 返回类型long
  • 示例
    long value = data.consumeLong(1L, 100L);
    

16. consumeFloat(float min, float max)

  • 描述:生成一个在指定范围内的浮点型值。
  • 参数min - 最小值,max - 最大值。
  • 返回类型float
  • 示例
    float value = data.consumeFloat(1.0f, 10.0f);
    

17. consumeDouble(double min, double max)

  • 描述:生成一个在指定范围内的双精度浮点型值。
  • 参数min - 最小值,max - 最大值。
  • 返回类型double
  • 示例
    double value = data.consumeDouble(1.0, 10.0);
    

18. pickValue(T... values)

  • 描述:从给定的值中随机选择一个值。
  • 参数values - 要选择的值。
  • 返回类型T
  • 示例
    String choice = data.pickValue("A", "B", "C");
    

综合示例

下面是一个综合使用 FuzzedDataProvider 不同方法的示例:

import com.code_intelligence.jazzer.api.FuzzedDataProvider;
import com.code_intelligence.jazzer.junit.FuzzTest;

public class MyFuzzTest {

    @FuzzTest
    void myFuzzTest(FuzzedDataProvider data) {
        boolean boolValue = data.consumeBoolean();
        byte byteValue = data.consumeByte();
        short shortValue = data.consumeShort();
        int intValue = data.consumeInt();
        long longValue = data.consumeLong();
        float floatValue = data.consumeFloat();
        double doubleValue = data.consumeDouble();
        String asciiString = data.consumeAsciiString(50);
        byte[] bytes = data.consumeBytes(100);
        String utf8String = data.consumeRemainingAsString(StandardCharsets.UTF_8);
        int boundedIntValue = data.consumeInt(1, 100);
        long boundedLongValue = data.consumeLong(1L, 100L);
        float boundedFloatValue = data.consumeFloat(1.0f, 10.0f);
        double boundedDoubleValue = data.consumeDouble(1.0, 10.0);
        String pickedValue = data.pickValue("Option1", "Option2", "Option3");

        // 输出生成的数据
        System.out.println("Boolean: " + boolValue);
        System.out.println("Byte: " + byteValue);
        System.out.println("Short: " + shortValue);
        System.out.println("Int: " + intValue);
        System.out.println("Long: " + longValue);
        System.out.println("Float: " + floatValue);
        System.out.println("Double: " + doubleValue);
        System.out.println("ASCII String: " + asciiString);
        System.out.println("Bytes: " + java.util.Arrays.toString(bytes));
        System.out.println("UTF-8 String: " + utf8String);
        System.out.println("Bounded Int: " + boundedIntValue);
        System.out.println("Bounded Long: " + boundedLongValue);
        System.out.println("Bounded Float: " + boundedFloatValue);
        System.out.println("Bounded Double: " + boundedDoubleValue);
        System.out.println("Picked Value: " + pickedValue);
    }
}
  • 21
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值