2008 Advent Calendar December 20th
1: public class Advent20
2: {
3: private FileUtilWithDelete Given_A_File(string content, bool readable)
4: {
5: FileUtilWithDelete file = new FileUtilWithDelete("SomeFile.txt");
6: file.Create(content);
7: file.Readable = readable;
8: return file;
9: }
10:
11: [Fact]
12: public void Reading_A_Readable_File_Returns_File_Content()
13: {
14: using (FileUtilWithDelete file = Given_A_File("CONTENT", true))
15: {
16: string content = file.Read();
17: Assert.Equal<string>("CONTENT", content);
18: }
19: }
20:
21: [Fact]
22: public void Reading_An_Unreadable_File_Throws_Correct_Exception()
23: {
24: using (FileUtilWithDelete file = Given_A_File("SHOULD NOT BE ABLE TO READ THIS", false))
25: {
26: Assert.Throws<AccessViolationException>(() => { file.Read(); });
27: }
28: }
29: }
The "Given_By" pattern has been "stolen" from BDD and the whole purpose is to make the test as readable as possible. Reading a test should more or less be like reading a paragraph. So "Given_A_File" is not really that great. It is probably better to have different Given-methods depending on what we want.