簡體   English   中英

Ploeh的AutoFixture for .Net是否有Java替代方案?

[英]Is there a Java alternative to Ploeh's AutoFixture for .Net?

我正在尋找一個Java工具,可以在我的測試中創建匿名變量 (我不關心它的值的變量),類似於.Net中的AutoFixture。 這是AutoFixture自述文件的鏈接,它有很好的例子。

以下是同一自述文件中的簡短示例:

[TestMethod]
public void IntroductoryTest()
{
    // Fixture setup
    Fixture fixture = new Fixture();

    int expectedNumber = fixture.CreateAnonymous<int>();
    MyClass sut = fixture.CreateAnonymous<MyClass>();
    // Exercise system
    int result = sut.Echo(expectedNumber);
    // Verify outcome
    Assert.AreEqual<int>(expectedNumber, result, "Echo");
    // Teardown
}

Java世界中有這樣的工具嗎?

編輯:

我嘗試過QuickCheck,雖然它設法做了我想要的事情:

import net.java.quickcheck.Generator;
import net.java.quickcheck.generator.PrimitiveGenerators;
import net.java.quickcheck.generator.support.ObjectGeneratorImpl;

public class Main {

interface Test{
     String getTestValue();
}

public static void main(String[] args) {
    Generator<String> stringGen = PrimitiveGenerators.strings(5, 100);
    Generator<Integer> intGen = PrimitiveGenerators.integers(5, 20);

    ObjectGeneratorImpl<Test> g = new ObjectGeneratorImpl<>(Test.class);
    g.on(g.getRecorder().getTestValue()).returns(stringGen);


    for (int i = 0; i < intGen.next(); i++) {
        System.out.println("value of testValue is: " + g.next().getTestValue());
    }
}

}

該工具似乎只適用於接口。 如果我將Test更改為類,並將方法更改為字段,則生成器會拋出僅支持接口的異常。

我真誠地希望有更好的東西,特別是因為文件嚴重缺乏。

還有JFixture可以在github上找到並發布到maven central

這仍處於積極開發階段,功能請求正在得到尊重。

伊萬,

我開始了一個專注於重新實現java中AutoFixture核心功能的項目 AutoFixture肯定有很多功能,所以我需要優先考慮首先實現哪些功能,哪些功能根本不需要執行。 由於項目剛剛開始,我歡迎測試,缺陷報告和功能請求。

試試對象工廠。 它是在github上開源的。 它可以在一行代碼中創建隨機Java對象。 它具有高度可配置性。

例:

ObjectFactory rof = new ReflectionObjectFactory();

String str = rof.create(String.class);
Customer cus = rof.create(Customer.class);

它也可以在Maven Central Repository中找到。

有一個QuickCheck的Java實現,它有用於生成測試數據的API:

http://java.net/projects/quickcheck/pages/Home

我對AutoFixture並不太熟悉,我懷疑QuickCheck是一種稍微不同的測試框架,但它可能對解決您的特定問題很有用。

ObjectGenerator更像是一個實驗性功能:

ObjectGenerator<Test> objects = PrimitiveGenerators.objects(Test.class);
objects.on(objects.getRecorder().getTestValue()).returns(PrimitiveGenerators.strings());

Test next = objects.next();
System.out.println(next.getTestValue());

我更喜歡簡單的Generator實現:

class TestGenerator implements Generator<Test>{
    Generator<String> values = PrimitiveGenerators.strings();
    @Override public Test next() {
        return new TestImpl(values.next());
    }   
}

我在Mockito .spy()中使用JFixture ;)

讓我們看一個如何使用AutoFixture和C#做一些簡單的事情的例子。 這里的想法是在對象中生成隨機數據,除了一些需要具有特定值的特定方法。 有趣的是,我沒有找到某處說明的內容。這種技術消除了單元測試中的“排列”部分是少量的行,另外還關注需要特定的值才能使這個單元測試通過

public class SomeClass {
    public int id; //field I care
    public String name; // fields I don't care
    public String description; //fields I don't care

    public int getId(){
        return id;
    } 

    public void setId(int id){
        this.id = id;
    }

    public String getName(){
        return name;
    }

    public void setName(String name){
        this.name = name;
    }

    public String getDescription(){
        return description;
    }

    public void setDescirption(String description){
        this.description = description;
    }
}



public static void main(String args[]){
    JFixture fixture = new JFixture();
    fixture.customise().circularDependencyBehaviour().omitSpecimen(); //omit circular dependencies
    fixture.customise().noResolutionBehaviour().omitSpecimen(); // omit methods that cannot be resolved
    SomeClass entity = fixture.create(SomeClass.class);
    SomeClass mock = Mockito.spy(entity);
    Mockito.when(mock.getId()).thenReturn(3213);

    System.out.println(mock.getId()); // always 3213
    System.out.println(mock.getName()); // random
    System.out.println(mock.getDescription()); //random
}

這打印:

3213
name9a800265-d8ef-4be9-bd45-f0b62f791d9c
descriptiona9f9245f-eba1-4805-89e3-308ef69e7091

另一個QuickCheck for Java是另一個你可能會看一看的工具。

它與JUnit非常集成(它支持帶參數的測試,注釋來配置生成的對象等)。

它有很多生成器(所有的快速檢查,一些特定於OOP,如接口,抽象類和單例生成器),你可以定義自己的生成器。 還有一個基於構造函數的生成器。

目前處於alpha狀態,但如果您查看下載頁面,您將看到基本文檔。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM