Не уверен, почему вы используете обратный вызов.Кажется, что
mock.Setup(x => x.WriteData(It.IsAny<string>())).Verifiable()
...
mock.Verify(x => x.WriteData(It.IsAny<string>()), Times.Exactly(3))
сделает то же самое.
И я думаю, что вы также можете избежать настройки и просто использовать строку проверки, чтобы у вас было только
mock.Verify(x => x.WriteData(It.IsAny<string>()), Times.Exactly(3))