New to Moq and Mocking in general. Testing a class that has a generic RepositoryFactory and uses several of it’s repositories. Should I initialize like this or is there some better way?
Mock<IRepositoryFactory> factory;
Mock<IRepository<User>> userRepository;
Mock<IRepository<Role>> roleRepository;
Mock<IRepository<Meeting>> meetingRepository;
[TestInitialize()]
public void MyTestInitialize()
{
meetingRepository = new Mock<IRepository<Meeting>>();
//some meeting setup
userRepository = new Mock<IRepository<User>>();
//some user setup
roleRepository = new Mock<IRepository<Role>>();
//some role setup
factory = new Mock<IRepositoryFactory>();
factory.Setup(f => f.CreateRepository<Meeting>()).Returns(meetingRepository.Object);
factory.Setup(f => f.CreateRepository<User>()).Returns(userRepository.Object);
factory.Setup(f => f.CreateRepository<Role>()).Returns(roleRepository.Object);
Note that I could have mcuh more.
here I’m doing it all in my initialize method but guess I should do it individually or something also.
I don’t know of a way to set up
f => f.CreateRepository<T>(), considering that your repository setup could be different for eachT. Aside from that, you can use functional specifications (see this blog post), which makes things a bit cleaner.For your example, it would look like this: