Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on May 4th, 2012  |  syntax: None  |  size: 3.50 KB  |  hits: 15  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. Unit Testing return value of method called from inside another method
  2. public List<MyClass> DoSomething(string Name, string Address, string Email, ref string ErrorMessage)
  3. {
  4.   //Check for empty string parameters etc now go and get some data  
  5.   List<MyClass> Data = GetData(Name, Address, Email);
  6.  
  7.   /*************************************************************    
  8.   //How do I unit test that the data variable might be empty???    
  9.   *************************************************************/
  10.  
  11.   List<MyClass> FormattedData = FormatData(Data);
  12.   return FormattedData;
  13. }
  14.        
  15. public List<MyClass> DoSomething(string Name, string Address,
  16.               string Email, ref string ErrorMessage, IDataProvider provider)
  17. {
  18.   //Check for empty string parameters etc now go and get some data  
  19.   List<MyClass> Data = provider.GetData(Name, Address, Email);
  20.  
  21.   List<MyClass> FormattedData = FormatData(Data);
  22.   return FormattedData;
  23. }
  24.        
  25. [Test]
  26. public void When_user_forgot_password_should_save_user()
  27. {
  28.     // Arrange
  29.     var errorMessage = string.Empty;
  30.     var dataProvider = MockRepository.GenerateStub<IDataProvider>();
  31.     dataProvider.Stub(x => x.GetData("x", "y", "z", ref errorMessage )).Return(null);
  32.  
  33.     // Act
  34.     var result DoSomething("x","y","z", ref errorMessage, dataProvider);
  35.  
  36.     // Assert
  37.  
  38.     //...
  39. }
  40.        
  41. public class Daddy {
  42.     public List<MyClass> DoSomething(string Name, string Address,                  string Email, out string ErrorMessage, IDataProvider provider)
  43.     {
  44.       //Check for empty string parameters etc now go and get some data  
  45.       List<MyClass> Data = provider.GetData(Name, Address, Email);
  46.  
  47.       if (Data.Count == 0)
  48.       {
  49.           ErrorMessage = "Oh noes";
  50.           return Enumerable.Empty<MyClass>();
  51.       }
  52.  
  53.       List<MyClass> formattedData = FormatData(Data);
  54.       return formattedData;
  55.     }
  56. }
  57.  
  58. [TestClass]
  59. public class DaddyTest {
  60.     [TestMethod]
  61.     public void DoSomethingHandlesEmptyDataSet() {
  62.         // set-up
  63.         Daddy daddy = new Daddy();
  64.  
  65.         // test
  66.         IList<MyClass> result = daddy.DoSomething("blah",
  67.                                                   "101 Dalmation Road",
  68.                                                   "bob@example.com",
  69.                                                   out error,
  70.                                                   new FakeProvider(new Enumerable.Empty<AcmeData>())); // a class we've written to act in lieu of the real provider
  71.  
  72.         // validate
  73.         Assert.NotNull(result); // most testing frameworks provides Assert functionality
  74.         Assert.IsTrue(result.Count == 0);
  75.         Assert.IsFalse(String.IsNullOrEmpty(error));
  76.     }
  77. }
  78.        
  79. List<MyClass> Data = GetData(Name, Address, Email);
  80.        
  81. public List<MyClass> DoSomething(List<MyClass> data, ref string ErrorMessage)
  82.        
  83. class ThisClass
  84. {
  85.    [Import]
  86.    public IDataService DataService {get; set;}
  87.  
  88.    public List<MyClass> DoSomething(string Name, string Address, string Email, ref string ErrorMessage)
  89.    {
  90.      //Check for empty string parameters etc now go and get some data  
  91.      List<MyClass> Data = IDataService.GetData(Name, Address, Email); // using dependency
  92.  
  93.      List<MyClass> FormattedData = FormatData(Data);
  94.      return FormattedData;
  95.    }
  96. }
  97.        
  98. [TestMethod]
  99. public void MyDoSomethingTest()
  100. {
  101.    string errorMessage = string.Empty;
  102.    var actual = myClass.DoSomething(..., ref errorMessage)
  103.    Assert.AreEqual("MyErrorMessage", errorMessage);
  104.    Assert.AreEqual(0, FormattedData.Count);
  105. }
  106.        
  107. errorMessage = "Empty parameters are not allowed";
  108. return new List<MyClass>();