Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Testing a method called many times in moq

Tags:

c#

tdd

moq

I have an interface like so:

Interface IWriteFile {
  string FileName {get;set;}
  void Open();
  void WriteData(string dataToWrite);
  void Close();
}

I want to test a class that will use this interface to populate a file. It will be calling WriteData a bunch of times and I just want to test the final output. Is there a way to introduce a new private field to the Mock object that will get appended to each time WriteData(Data) is called?

I really just want to see what the file will look like at the end of the day. Is there a better approach to this?

like image 274
Rob Avatar asked Feb 26 '23 14:02

Rob


1 Answers

So, do you need some sort of count of the number of times it is called?

int count = 0;
List<string> items = new List<string>();
var mock = new Mock<IWriteFile>();
mock.Setup(m => m.WriteData(It.IsAny<string>()))
    .Callback((string data) => { items.Add(data); count++; });
like image 115
Matthew Abbott Avatar answered Mar 08 '23 05:03

Matthew Abbott