Created
May 27, 2011 05:00
-
-
Save skoon/994671 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Collections.Generic; | |
namespace MostlyScottish { | |
//This is what I think we should move towards | |
public interface IRepository<T> { | |
void Save(T entity); | |
} | |
public class StuffRepository : IRepository<Stuff> { | |
public void Save(Stuff entity) { | |
//save the Stuff | |
} | |
} | |
public class Stuff { | |
//poco DB entity class | |
} | |
public class StuffDoer { | |
private readonly IRepository<Stuff> _StuffRepo; | |
public StuffDoer(IRepository<Stuff> stuffRepo) { | |
_StuffRepo = stuffRepo; | |
} | |
public void MethodUnderTest() { | |
// blah blah blah, stuff we can't mock because they are all private instance methods | |
IEnumerable<Stuff> stuffCollection = new List<Stuff>(); | |
foreach (var thing in stuffCollection) { | |
_StuffRepo.Save(thing); | |
//Now there is a direct link to the Save method on the StuffRepository. | |
} | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Collections.Generic; | |
namespace NotScottish { | |
//http://www.youtube.com/watch?v=KrQxQPG8JdE&feature=related | |
//So this is what we have now. | |
public interface IRepository<T> { | |
void Save(T entity); | |
} | |
public interface IStuffRepository : IRepository<Stuff> { | |
} | |
public abstract class BaseRepository<T> : IRepository<T> { | |
public void Save(T entity) { | |
//method that accepts string,Func<ISession,T> | |
} | |
} | |
public class StuffRepository : BaseRepository<Stuff>, IStuffRepository { | |
//Trying to use NSubstitute to mock the "Save" method, but where is it really at runtime? | |
} | |
public class Stuff { | |
//poco DB entity class | |
} | |
public class StuffDoer { | |
private readonly IStuffRepository _StuffRepo; | |
public StuffDoer(IStuffRepository stuffRepo) { | |
_StuffRepo = stuffRepo; | |
} | |
public void MethodUnderTest() { | |
// blah blah blah, stuff we can't mock because they are all private instance methods | |
IEnumerable<Stuff> stuffCollection = new List<Stuff>(); | |
foreach (var thing in stuffCollection) { | |
_StuffRepo.Save(thing); | |
//Where is the Save method located at runtime and what can we really mock at this point? | |
//I think it's really located in BaseRepository BUT my magic mocker thinks that it is located on the instance of | |
//StuffRepository. So when it mocks "Save" on the StuffRepository, the mock method is located at one place on | |
//the heap, and the real Save method on the BaseRepository is located at another location on the heap. Both the | |
//StuffRepository and BaseRepository have their own MethodTables. | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Oh in that case ignore my fork.