Giter VIP home page Giter VIP logo

Comments (2)

seongahjo avatar seongahjo commented on August 15, 2024

@esfomeado
Hello, it is a tough question.
I need more time to figure out a better way to handle this.

For a while it is better to use a special ArbitrayIntrospector just like below with pushExactTypeArbitraryIntrospector option.

public class MixedArbitraryIntrospector implements ArbitraryIntrospector {
		public static final MixedArbitraryIntrospector INSTANCE = new MixedArbitraryIntrospector();

		@Override
		public ArbitraryIntrospectorResult introspect(ArbitraryGeneratorContext context) {
			Map<ArbitraryProperty, CombinableArbitrary<?>> arbitraryListByArbitraryProperty =
				context.getCombinableArbitrariesByArbitraryProperty();

			return new ArbitraryIntrospectorResult(
				ConstructorPropertiesArbitraryIntrospector.INSTANCE.introspect(context)
					.getValue()
					.map(instance -> {
						for (Entry<ArbitraryProperty, CombinableArbitrary<?>> arbitraryByArbitraryProperty : arbitraryListByArbitraryProperty.entrySet()) {
							Property property = arbitraryByArbitraryProperty.getKey()
								.getObjectProperty()
								.getProperty();

							if (property instanceof CompositeProperty) {
								property = ((CompositeProperty)property).getPrimaryProperty();
							}

							if (property instanceof ConstructorProperty) {
								continue;
							}

							try {
								if (property instanceof FieldProperty) {
									((FieldProperty)property).getField()
										.set(instance, arbitraryByArbitraryProperty.getValue().combined());
								} else if (property instanceof PropertyDescriptorProperty) {
									((PropertyDescriptorProperty)property).getPropertyDescriptor()
										.getWriteMethod()
										.invoke(instance, arbitraryByArbitraryProperty.getValue().combined());
								}
							} catch (Exception ex) {
								// ignored
							}
						}
						return instance;
					})
			);
		}
	}

Thank you.

from fixture-monkey.

seongahjo avatar seongahjo commented on August 15, 2024

@esfomeado
You can easily address it by new experimental feature in 0.6.12.

DataTest dataTest = fixtureMonkey.giveMeExperimentalBuilder(DataTest.class)
			.instantiate(
				Instantiator.constructor()
					.field()
			)
			.sample();

from fixture-monkey.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.