Further to my initial response ....

I think that maybe *the dependency graph is your issue.* I think what you 
are trying to do is to test your POCO objects, which you are finding 
difficult to do because in the current design there are some hidden, *hard 
coded volatile dependencies*. 

Once you have broken these dependencies your problem will disappear (at 
least I think that's the case, if I've interpreted the combination of your 
question and the Telerik link you posted).




On Thursday, September 13, 2012 2:25:34 AM UTC+1, jdl wrote:
>
> All,
>
> I have been going back and form with the team at Telerik that put out 
> JustMock as I am evaluating several mocking frameworks right now. I spend 
> most of my day working in business layer logic in IIS hosted WCF services. 
> I am attempting to break my SQL server dependecy in my unit tests by 
> mocking out the db context. A Rhino Mocks users essentially achieved what I 
> am looking for here in 2009 using an old implementation of OpenAccess here: 
> http://www.reversealchemy.net/blog/2009/03/17/exploring-telerik-openaccess-unit-testing-your-business-logic-using-rhino-mocks/.
>  
> The issue is several fold but the root of it is that OA 
> has fundamentally changed its implementation since then and I cannot seem 
> to get it to jive quite right with either JustMock or not Rhino Mocks. I 
> have emailed the original author of the article to see if he has an updated 
> example and will post his response here should he respond. Ultimately what 
> it boils down to is that I have methods that perform business logic that 
> may or may not add/update entities (hacked example code below). What I am 
> trying to achieve (and it simply may not be possible given my end goal and 
> I apologize as I am relatively new to mocking) is to break the dependency 
> on a DB on the other end while still leveraging the code as if it were (i.e 
> Add an entity to the context but not actually commit it OR when an add 
> occurs on an entity whose ID is a uniqueidentifier (guid), return a new 
> guid to simulate success which allows the update method to use that 
> entity's guid to perform the update operation).
>
> Please let me know if you need a more extensive code example. I am hopeful 
> that Erik's post and the sample methods below will highlight what I am 
> trying to do, something that I have not yet successfully conveyed to 
> Telerik.
>
> public static Guid AddUser(string name, int legacyId = -1)
>         {
>             try
>             {
>                 using (var model = new VerifyModel())
>                 {
>                     User userEntity = GetUserEntity(name);
>  
>                     if (userEntity != null)
>                     {
>                         return userEntity.Guid;
>                     }
>  
>                     var newUser = new User
>                     {
>                         Name = name,
>                         LegacyId = legacyId
>                     };
>  
>                     model.Add(newUser);
>                     model.SaveChanges();
>                     UserContainer.Instance.Refresh();
>                     return newUser.Guid;
>                 }
>             }
>             catch (Exception exception)
>             {
>                 ErrorLogWriter.Write(MethodBase.GetCurrentMethod().Name, 
> exception);
>             }
>  
>             return Guid.Empty;
>         }
>  
> Update method handles optimistic verification exceptions but at the end of 
> the day simply performs a sql update.
>  
> public static bool UpdateUserDetails(Guid userGuid, 
> IEnumerable<ElementAttributeValues> elementAttributeValues)
>         {
>             try
>             {
>                 var historyEvents = new List<string>();
>  
>                 using (var model = new VerifyModel())
>                 {
>                     var user = model.Users.SingleOrDefault(p => p.Guid == 
> userGuid);
>  
>                     if (user == null)
>                     {
>                         return false;
>                     }
>  
>                     var enumeratedElementAttributeValues = 
> elementAttributeValues asList<ElementAttributeValues> ?? 
> elementAttributeValues.ToList();
>  
>                     try
>                     {
>                         
> UpdateUserEntity(enumeratedElementAttributeValues, ref user, ref
> historyEvents);
>  
>                         model.SaveChanges();
>                     }
>                     catch (OptimisticVerificationException 
> optimisticVerificationException)
>                     {
>                         ErrorLogWriter.Write(string.Format("An optimistic 
> verification exception occured in {0} and the commit will be retried. The 
> error message is: {1}.",
>                                                            
> MethodBase.GetCurrentMethod().Name,
>                                                            
> optimisticVerificationException.Message));
>  
>                         model.Refresh(RefreshMode.OverwriteChangesFromStore, 
> user);
>  
>                         // retry update
>                         
> UpdateUserEntity(enumeratedElementAttributeValues, ref user, ref
> historyEvents);
>  
>                         model.SaveChanges();
>                     }
>  
>                     foreach (string historyEvent in historyEvents)
>                     {
>                         HistoryWriter.Write(userGuid, historyEvent);
>                     }
>  
>                     return true;
>                 }
>             }
>             catch (Exception exception)
>             {
>                 ErrorLogWriter.Write(MethodBase.GetCurrentMethod().Name, 
> exception);
>             }
>  
>             return false;
>         }
>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Rhino.Mocks" group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/rhinomocks/-/TJ7Yxisb3_kJ.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/rhinomocks?hl=en.

Reply via email to