- Unit Testing return value of method called from inside another method
- public List<MyClass> DoSomething(string Name, string Address, string Email, ref string ErrorMessage)
- {
- //Check for empty string parameters etc now go and get some data
- List<MyClass> Data = GetData(Name, Address, Email);
- /*************************************************************
- //How do I unit test that the data variable might be empty???
- *************************************************************/
- List<MyClass> FormattedData = FormatData(Data);
- return FormattedData;
- }
- public List<MyClass> DoSomething(string Name, string Address,
- string Email, ref string ErrorMessage, IDataProvider provider)
- {
- //Check for empty string parameters etc now go and get some data
- List<MyClass> Data = provider.GetData(Name, Address, Email);
- List<MyClass> FormattedData = FormatData(Data);
- return FormattedData;
- }
- [Test]
- public void When_user_forgot_password_should_save_user()
- {
- // Arrange
- var errorMessage = string.Empty;
- var dataProvider = MockRepository.GenerateStub<IDataProvider>();
- dataProvider.Stub(x => x.GetData("x", "y", "z", ref errorMessage )).Return(null);
- // Act
- var result DoSomething("x","y","z", ref errorMessage, dataProvider);
- // Assert
- //...
- }
- public class Daddy {
- public List<MyClass> DoSomething(string Name, string Address, string Email, out string ErrorMessage, IDataProvider provider)
- {
- //Check for empty string parameters etc now go and get some data
- List<MyClass> Data = provider.GetData(Name, Address, Email);
- if (Data.Count == 0)
- {
- ErrorMessage = "Oh noes";
- return Enumerable.Empty<MyClass>();
- }
- List<MyClass> formattedData = FormatData(Data);
- return formattedData;
- }
- }
- [TestClass]
- public class DaddyTest {
- [TestMethod]
- public void DoSomethingHandlesEmptyDataSet() {
- // set-up
- Daddy daddy = new Daddy();
- // test
- IList<MyClass> result = daddy.DoSomething("blah",
- "101 Dalmation Road",
- "bob@example.com",
- out error,
- new FakeProvider(new Enumerable.Empty<AcmeData>())); // a class we've written to act in lieu of the real provider
- // validate
- Assert.NotNull(result); // most testing frameworks provides Assert functionality
- Assert.IsTrue(result.Count == 0);
- Assert.IsFalse(String.IsNullOrEmpty(error));
- }
- }
- List<MyClass> Data = GetData(Name, Address, Email);
- public List<MyClass> DoSomething(List<MyClass> data, ref string ErrorMessage)
- class ThisClass
- {
- [Import]
- public IDataService DataService {get; set;}
- public List<MyClass> DoSomething(string Name, string Address, string Email, ref string ErrorMessage)
- {
- //Check for empty string parameters etc now go and get some data
- List<MyClass> Data = IDataService.GetData(Name, Address, Email); // using dependency
- List<MyClass> FormattedData = FormatData(Data);
- return FormattedData;
- }
- }
- [TestMethod]
- public void MyDoSomethingTest()
- {
- string errorMessage = string.Empty;
- var actual = myClass.DoSomething(..., ref errorMessage)
- Assert.AreEqual("MyErrorMessage", errorMessage);
- Assert.AreEqual(0, FormattedData.Count);
- }
- errorMessage = "Empty parameters are not allowed";
- return new List<MyClass>();