2008 Advent Calendar December 21st

 

   1:      public class Advent21
   2:      {
   3:          private FileUtilWithDelete Given_A_Readable_File(string content)
   4:          {
   5:              FileUtilWithDelete file = new FileUtilWithDelete("SomeFile.txt");
   6:              file.Create(content);
   7:              return file;
   8:          }
   9:   
  10:          private FileUtilWithDelete Given_An_Unreadable_File()
  11:          {
  12:              FileUtilWithDelete file = Given_A_Readable_File("SHOULD NOT BE ABLE TO READ THIS");
  13:              file.Readable = false;
  14:              return file;
  15:          }
  16:   
  17:          [Fact]
  18:          public void Reading_A_Readable_File_Returns_File_Content()
  19:          {
  20:              using (FileUtilWithDelete file = Given_A_Readable_File("CONTENT"))
  21:              {
  22:                  string content = file.Read();
  23:                  Assert.Equal<string>("CONTENT", content);
  24:              }
  25:          }
  26:   
  27:          [Fact]
  28:          public void Reading_An_Unreadable_File_Throws_Correct_Exception()
  29:          {
  30:              using (FileUtilWithDelete file = Given_An_Unreadable_File())
  31:              {
  32:                  Assert.Throws<AccessViolationException>(() => { file.Read(); });
  33:              }
  34:          }
  35:      }

Now let's consider the name of the class containing all tests. A pretty bad name if you ask me. And since we've used the "given" pattern from BDD we can use BDD to inspire us into a better "test class name".