如何在java中创建带有伪数据的对象?

vsikbqxv  于 2023-03-06  发布在  Java
关注(0)|答案(5)|浏览(165)

假设我想为Person类创建一个带有伪数据的对象,手动的,这会花很多时间,而且Person类内部包含了Parties类,有没有简单的方法来创建带有伪数据的对象,通过使用mockito我们可以创建对象,但是手动的伪数据是很困难的。

class Person {
    int age;
    ArrayList<Parties> parties;

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public ArrayList<Parties> getParties() {
        return parties;
    }

    public void setParties(ArrayList<Parties> parties) {
        this.parties = parties;
    }
}

class Parties {
    private int date, month, year;

    public int getDate() {
        return date;
    }

    public void setDate(int date) {
        this.date = date;
    }

    public int getMonth() {
        return month;
    }

    public void setMonth(int month) {
        this.month = month;
    }

    public int getYear() {
        return year;
    }

    public void setYear(int year) {
        this.year = year;
    }
}
u59ebvdq

u59ebvdq1#

最后,我找到了一个解决方案,通过使用Java中的PODAM库来伪造类中的对象数据,而不需要人工交互。
我们可以使用Podam库为对象伪造数据。

依赖关系

<dependency>
        <groupId>uk.co.jemos.podam</groupId>
        <artifactId>podam</artifactId>
        <version>7.1.0.RELEASE</version>
</dependency>

代码

PodamFactory factory = new PodamFactoryImpl();
Person myPojo = factory.manufacturePojo(Person.class);

参考:PODAM

zc0qhyus

zc0qhyus2#

您可以使用Instancio通过一行程序来完成此操作:

Person person = Instancio.create(Person.class);

这将返回一个已填充的人员,包括嵌套对象和集合。您还可以使用生成器API自定义生成的值:

Person person = Instancio.of(Person.class)
    .generate(field("age"), gen -> gen.ints().range(18, 65))
    .create();

如果您使用JUnit 5,您还可以将其与@ParameterizedTest一起使用:

@ExtendWith(InstancioExtension.class)
class ExampleTest {

    @ParameterizedTest
    @InstancioSource
    void example(Person person) {
        // snip...
    }
}

您可以在Instancio user guide中找到更多示例。
https://www.github.com/instancio/instancio
免责声明:我是这个库的作者。

but5z9lq

but5z9lq3#

您可以使用java Faker:

<dependency>
    <groupId>com.github.javafaker</groupId>
    <artifactId>javafaker</artifactId>
    <version>0.12</version>
</dependency>

示例用法:

Faker faker = new Faker();

String name = faker.name().fullName(); // Miss Samanta Schmidt
String firstName = faker.name().firstName(); // Emory
String lastName = faker.name().lastName(); // Barton

String streetAddress = faker.address().streetAddress(); // 60018 Sawayn Brooks Suite 449

项目地点:http://dius.github.io/java-faker/

tmb3ates

tmb3ates4#

如果你在测试中关注Person,你不需要创建Parties数据。你可以这样写:

Mockito.doReturn(new ArrayList()).when(your-mocked-person-object.getParties());
qeeaahzv

qeeaahzv5#

下面是一些常用的快速测试数据的技巧:
1)创建一个人员对象作为基础(手工)。各种测试只需要修改部分数据,如更改姓氏等。
2)创建一个数据生成工具,如FakePersonCreator。它可以使用固定字符串和随机数据的组合。编写一个生成人员的函数,并让测试使用它。
3)使用真实的数据作为测试数据。您可以从实际程序运行中记录数据,并将其导出到文件中。然后,您有两种选择:

  • 在测试运行时从文件中读取测试数据
  • 编写一个生成java代码的实用程序,该代码根据您的数据文件构建测试数据(person

4)将大部分测试数据(人员)保持为空。让每个测试只设置它需要检查的字段。
5)使用模拟框架(例如Mockito)来模拟测试数据。创建模拟对象,这些对象只返回测试实际需要的字段。

相关问题