• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: WOInject and WOUnit co-operation
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: WOInject and WOUnit co-operation


  • Subject: Re: WOInject and WOUnit co-operation
  • From: Paul Hoadley <email@hidden>
  • Date: Wed, 6 Dec 2017 20:45:28 +1030

Hi Henrique,

Thanks a lot for taking a look.

On 6 Dec 2017, at 1:13 am, Henrique Prange <email@hidden> wrote:

> Even when testing non-EO related stuff, I favor injecting objects manually
> instead of relying on an injector. That said, the solution to your problem is
> a little bit more complicated since you need the injected object during the
> EO initialization. I see two options:

Just before we look at them, let me show you what I’ve got now.

public class MyEO {
        @Inject
        private AnyObject object;

        @Override
        protected void init(EOEditingContext ec) {
                setSomeAttribute(object.someValue());
                return;
        }
}

So that works as expected when running an InjectableApplication.

> Create a protected method to initialize the EO dependency:
>
> class MyEO {
>    private AnyObject object;
>
>    @Inject
>    protected void initMyObject(AnyObject object) {
>       this.object = object;
>    }
> }
>
> @Before
> public void setup() {
>    eo = new MyEO();
>
>    eo.initMyObject(anObject);
>
>    editingContext.insertObject(eo); // or insertSavedObject if you want to
> create a dummy EO.
> }

In this first solution, there’s no @Inject annotation on 'AnyObject object'
now. Forgive my Guice ignorance here—does the @Inject on initMyObject(AnyObject
object) cause that method to be _called_ by Guice? If so, when? (And if not,
does this still work in the InjectableApplication setting?)

> Alternatively, you can add a protected constructor to initialize the EO
> dependency:
>
> class MyEO extends ERXGenericRecord {
>    @Inject
>    private AnyObject myObject;
>
>    protected MyEO(AnyObject object) {
>       myObject = object;
>    }
> }
>
> @Before
> public void setup() {
>    eo = new MyEO(anObject);
>
>    editingContext.insertObject(eo); // or insertSavedObject if you want to
> create a dummy EO.
> }

This looks good.

> Even though I prefer constructor injection for non-EO objects, I usually
> implement the method injection when testing EOs.

Do you mean you prefer your first example above? I kind of liked the second one.

> It's not cool if you have to do it all the time, but it looks more polished
> than making your EO ask for a test version of the injected object. What do
> you think?

Great solutions—thanks. I’ll test them out tomorrow.

> Anyway, it would probably make sense to create a WOUnit extension to mitigate
> that problem.

Tell me more about this. My first attempt was to pilfer some of the stuff in
WOInject’s src/test/java, but I never quite made anything work. What would a
WOUnit extension do here (and how can I help)? (Also, I saw some recent commits
to WOUnit—you planning a new release?)


--
Paul Hoadley
https://logicsquad.net/
https://www.linkedin.com/company/logic-squad/


 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list      (email@hidden)
Help/Unsubscribe/Update your Subscription:

This email sent to email@hidden

  • Follow-Ups:
    • Re: WOInject and WOUnit co-operation
      • From: Paul Hoadley <email@hidden>
References: 
 >WOInject and WOUnit co-operation (From: Paul Hoadley <email@hidden>)
 >Re: WOInject and WOUnit co-operation (From: Henrique Prange <email@hidden>)

  • Prev by Date: Re: WOInject and WOUnit co-operation
  • Next by Date: Re: WOInject and WOUnit co-operation
  • Previous by thread: Re: WOInject and WOUnit co-operation
  • Next by thread: Re: WOInject and WOUnit co-operation
  • Index(es):
    • Date
    • Thread