Это то, что я обычно делаю, чтобы тестировать подобные вещи.
Получите из моего метода код, который зависит от не тестируемых модулей.
Например, System.Windows.Clipboard.GetFileDropList находится вне вашего контроля и не должен подвергаться модульному тестированию (это внешняя зависимость). Чтобы не допустить этого в ваш модульный тест, вам нужно использовать внедрение зависимостей.
Создайте интерфейс, подобный этому:
public interface IClipboard
{
StringCollection GetClipBoardInfo();
}
Внедрить наследующий класс в метод DoCtrlV.
public void DoCtrlV(object obj, IClipboard clipboard)
Создайте класс, который реализует интерфейсную версию метода и возвращает правильную функцию буфера обмена:
public StringCollection GetClipBoardInfo()
{
System.Windows.Clipboard.GetFileDropList();
}
Теперь создайте класс для модульного тестирования, который просто возвращает StringCollection и сообщает вам, был ли вызван метод.
public MockClipboard
{
public StringCollection GetClipBoardInfo()
{
ClipboardWasRead = true;
StringCollection col = new StringCollection();
col.Add("...");
return col;
}
public bool ClipboardWasRead { get; set; }
}
Таким образом, вы не занимаетесь модульным тестированием, которое не находится под вашим контролем (например, буфер обмена и файловая система). Если вы хотите проверить, читает ли ваш метод буфер обмена или нет, вы можете проверить его на логическом ClipboardWasRead метода. Здесь действительно важно то, что вам нужно будет переписать свой метод, чтобы он был более тестируемым модулем. Код, который вы сейчас написали, имеет много внешних зависимостей, например:
- System.Windows.Clipboard.GetFileDropList
- PasteFromOutsideSucceeded
- RefreshBothControls
Просто работайте с ними по одному, пока не почувствуете себя комфортно, если ваш код будет тестируемым по вашему вкусу.
Вот пример теста, который покажет вам, пытался ли ваш метод прочитать буфер обмена или нет.
[TestMethod]
public void WasClipboardRead()
{
// Arrange
var mock = new MockClipboard();
var obj = new Object();
// Act
DoCtrlV(obj, mock);
// Assert
Assert.IsTrue(mock.ClipboardWasRead);
}