Re: WOInject and WOUnit co-operation
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