2012-07-06 18 views
16

मैं एक जावा उपकरण की तलाश में हूं जो anonymous variables (वेरिएबल जिनके मूल्य की परवाह नहीं है) मेरे परीक्षणों में, .NET में ऑटोफिक्चर के समान होगा। यहां AutoFixture's readme का एक लिंक है, जिसमें यह बहुत अच्छा उदाहरण है जो यह करता है।क्या नेट के लिए प्लॉह ऑटोफिक्चर के लिए जावा विकल्प है?

यहाँ एक छोटी उदाहरण ही रीडमी से लिया जाता है:

[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 
} 

वहाँ जावा दुनिया में इस तरह के एक उपकरण है?

संपादित करें:

मैं 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()); 
    } 
} 

} 

उपकरण इंटरफेस के साथ ही काम करने लगता है। यदि मैं टेस्ट को एक वर्ग और फ़ील्ड के तरीके के रूप में बदलता हूं, तो जनरेटर एक अपवाद फेंकता है कि केवल इंटरफेस समर्थित हैं।

मैं ईमानदारी से आशा करता हूं कि कुछ बेहतर है, खासकर जब दस्तावेज़ में गंभीरता से कमी है।

+0

मुझे एसओ पर मेरा सटीक प्रश्न मिलने पर हमेशा एक बड़ी मुस्कुराहट होती है। (मुझे पता है कि टिप्पणी ज्यादा मूल्य नहीं जोड़ती है ...) –

उत्तर

2

वहाँ QuickCheck, जो परीक्षण डाटा पैदा करने के लिए एपीआई है की एक जावा दिया गया है:

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

मैं AutoFixture साथ भी परिचित नहीं हूँ, और मुझे लगता है QuickCheck परीक्षण की एक अलग तरह का है कि ढांचा, लेकिन शायद यह आपकी विशिष्ट समस्या को हल करने के लिए उपयोगी है।

+0

धन्यवाद। ऐसा लगता है कि यह काम करेगा, भले ही दस्तावेज़ीकरण की कमी आश्चर्यजनक है। साथ ही, प्रलेखन पीओजेओ पीढ़ी का समर्थन करने का दावा करता है, लेकिन जब मैं ऐसा करने का प्रयास करता हूं, तो जेनरेटर एक अपवाद फेंकता है "केवल इंटरफेस समर्थित" –

+0

@IvanAlagenchev हाँ, दस्तावेज़ीकरण बहुत अच्छा नहीं है। ऐसा लगता है कि आपको अपनी इच्छित पीओजेओ पीढ़ी के वर्ग-और-फ़ील्ड के प्रकार के लिए कस्टम जनरेटर बनाना है। यहां इसका एक उदाहरण है: http://java.net/projects/quickcheck/sources/repository/content/quickcheck-examples/src/test/java/FileGeneratorTest.java –

1

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()); 

मैं एक साधारण जेनरेटर कार्यान्वयन पसंद करेंगे:

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

धन्यवाद @ थॉमस जंग, मैं आगे बढ़ जाऊंगा जटिल कक्षाओं के लिए यह दृष्टिकोण –

0

Yet Another QuickCheck for Java एक और उपकरण आप शायद एक बार देख ले सकता है।

यह जुनीट के साथ बहुत एकीकृत है (यह पैरामीटर के साथ परीक्षणों का समर्थन करता है, उत्पन्न वस्तुओं को कॉन्फ़िगर करने के लिए एनोटेशन और इसी तरह)।

इसमें बहुत से जनरेटर (सभी त्वरित जांच, और कुछ ओओपी के लिए विशिष्ट हैं, जैसे इंटरफेस, सार कक्षाएं और सिंगलटन जनरेटर), और आप अपने स्वयं को परिभाषित कर सकते हैं। एक कन्स्ट्रक्टर आधारित जनरेटर भी है।

वर्तमान में अल्फा स्थिति में है, लेकिन यदि आप downloads page पर एक नज़र डालते हैं तो आपको एक मूल दस्तावेज दिखाई देगा।

+0

लिंक के लिए धन्यवाद। मैंने इसे देखा और इसके बारे में दो चीजें हैं जो मुझे मेरी परियोजनाओं में इस्तेमाल करने से दूर रखने जा रही हैं। पहला यह है कि यह एक विश्वविद्यालय द्वारा समर्थित है - मैं ऐसी परियोजनाओं का उपयोग करने के बारे में काफी परेशान हूं। धीरे-धीरे छात्र के पत्ते के बाद बनाए रखने के लिए कोई भी नहीं होता है। दूसरा यह है कि इसे पिछले साल अप्रैल से अपडेट नहीं किया गया है। हालांकि मैं एक नजर रखूंगा और यदि कुछ गतिविधि है तो मैं क्विक चेक के जावा कार्यान्वयन पर इसके साथ जा सकता हूं। –

3

इवान,

मैं एक project focused on reimplementing core features of AutoFixture in java शुरू कर दिया। ऑटोफिक्चर में निश्चित रूप से बहुत सी विशेषताएं हैं, इसलिए मुझे प्राथमिकता देने की आवश्यकता है कि कौन से पहले कार्यान्वित करें और कौन सा कार्यान्वयन परेशान न करें। चूंकि प्रोजेक्ट अभी शुरू हुआ है, मैं परीक्षण, दोष रिपोर्ट और फीचर अनुरोधों का स्वागत करता हूं।

5

जेएफआईक्चर भी है जो github पर उपलब्ध है और maven central पर प्रकाशित है।

यह अभी भी सक्रिय विकास में है, और फीचर अनुरोधों को सम्मानित किया जा रहा है।

+0

यह बहुत ही आशाजनक लग रहा है! – Jan

1

मुझे लगता है कि के लिए Mockito .spy() के साथ JFixture उपयोग कर रहा हूँ;)

के कुछ है कि इसके साथ AutoFixture और सी # तुच्छ होगा कैसे करना एक उदाहरण देखते हैं। यहां कुछ विचारों को छोड़कर कुछ विशिष्ट तरीकों को छोड़कर आपके मूल्य में यादृच्छिक डेटा उत्पन्न करना है। यह दिलचस्प है कि मुझे कहीं नहीं मिला .. यह तकनीक आपके यूनिट परीक्षणों के "व्यवस्थित" हिस्से को अलग-अलग लाइनों के रूप में समाप्त करती है और इसके अतिरिक्त इस यूनिट परीक्षण के लिए

पास करने के लिए किन मानों की आवश्यकता होती है
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 
0

कोशिश वस्तु कारखाना। यह github पर खुलासा हुआ है। यह कोड की केवल एक पंक्ति में यादृच्छिक जावा ऑब्जेक्ट्स बना सकता है। और यह अत्यधिक विन्यास योग्य है।

उदाहरण:

ObjectFactory rof = new ReflectionObjectFactory(); 

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

यह भी Maven केन्द्रीय भंडार में उपलब्ध है।