I have got the part with how the Mocking works, it's just that I am trying
to understand how to refactor a code by using Dependency injection . My
question is , even if there is dependency injection in a class A where the
injected object O is passed to it's constructor , The object O should be
created in some X class so it can be injected to A's constructor or set in
a setter method. Now does that mean we can't unit test that X class mocking
this O object because we are creating a new instance of O there ?


Thanks,
Vikram

On Tue, Feb 14, 2017 at 12:25 PM, Sang Shin <[email protected]>
wrote:

>
> I made a bit confusing statement at the end.  I clarified a bit.
>
> But lets say the Person object is created in a Request Handler class.
> While testing RequestHandler we wont be able to mock the objects right ? I
> hope you got my question. How do we handle this ?
>
>
> You do mocking only during testing.  The code below is in non-testing
> (production)
> environment and has nothing to do with testing.  (In fact, even if you do
> not
> have any dependency injection scheme mentioned above, you can still inject
> dependency to the target class.)
>
>
> I meant to say "(In fact, even if you do not
> have any dependency injection scheme mentioned above, you can still inject
> dependency to the target class via mocking.)"  In other words, even if you
> do not have the constructor method in which Address object is passed
> as a constructor argument, you can still inject Address object to the
> Person object via @InjectMocks.  Of course, if you do this, the production
> code will not work. :-)
>
> -Sang
>
>
>
> I will demonstrate this during our March 1st
> codecamp if you want.
>
> -S
>
>
>
> RequestHandler.java
>
> public void process (Person person){
>    Address address = new Address;
>    person = new Person (address);
>    person.getPersonAddressInfo();
> }
>
>
> Thanks,
> Vikram
>
> On Mon, Feb 13, 2017 at 6:58 PM, VikramSrinivasan Venkatakrishnan <
> [email protected]> wrote:
>
>> Please assist with my below question.
>>
>> Let's say we are refactoring the Person class.
>>
>> Before Person class:
>>
>> Person.java has a method ,
>>
>> public String getPersonAddressInfo(){
>> Address address = new Address ();
>> return address.getInfo();
>>
>> }
>>
>> After refactor Person class:
>>
>> @Autowired
>> Address address;
>>
>> public String getPersonAddressInfo(){
>> return address.getInfo();
>>
>> }
>>
>> Now , if we write a junit as below, mocking the address object,
>>
>> @Mock
>> Address address;
>>
>> @Inject Mock
>> Person person;
>>
>>
>> @setup{ required code}
>>
>> @Test public void
>> should_return_adress_info_as_something(){
>>     Mockito.when(address.getInfo()),thenReturn("Westbrough,MA");
>>     assertThat(person.getPersonAddressInfo, equalTo("Westborough,MA"));
>> }
>>
>> The method should_return_adress_info_as_something works only for the
>> After class and not Before class. Why is this the case ? Is it because we
>> are creating a new object in the Before Person Class ?
>>
>> Now, in the After class example that was given, let's say my prod app is
>> not on spring framework , how would i get an instance of my address object ?
>>
>> Kindly assist.
>>
>> Thanks,
>> Vikram
>>
>>
>
> --
> -------------------------------------------------------------------
>              Sang Shin, [email protected]
>          http://www.linkedin.com/in/javapassion (Linkedin)
>           http://twitter.com/javapassion (Tweeter)
>             Life is worth living... with Passion!
> ----------------------------------------------------------------------
>
>
> --
> -------------------------------------------------------------------
>              Sang Shin, [email protected]
>          http://www.linkedin.com/in/javapassion (Linkedin)
>           http://twitter.com/javapassion (Tweeter)
>             Life is worth living... with Passion!
> ----------------------------------------------------------------------
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"JPassion.com: Java Programming" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
Visit this group at https://groups.google.com/group/jpassion_java.
For more options, visit https://groups.google.com/d/optout.

Reply via email to