Тестовый Рефакторинг TDD для поддержки MultiThreading

Я бы получил текст из буфера обмена с помощью:

Dim DataObj As New MSForms.DataObject
DataObj.GetFromClipboard
myString = DataObj.GetText

, а затем проанализировал этот текст. Вы можете проверить эту ссылку https://excelmacromastery.com/vba-string-functions/#Extracting_Part_of_a_String

7
задан bendewey 11 December 2008 в 20:21
поделиться

2 ответа

Я столкнулся с подобными проблемами с ASP.NET MVC, где это - HttpContext, который отсутствует. Одна вещь, которую можно сделать, предоставляют альтернативному конструктору, который позволяет Вам вводить ложный SynchronizationContext или выставлять общедоступный метод set, который делает то же самое. Если Вы не можете изменить SynchronizationContext внутренне, то сделайте свойство, которое Вы устанавливаете на SynchronizationContext. Текущий в конструкторе по умолчанию и использовании, что свойство всюду по Вашему коду. В Вашем альтернативном конструкторе можно присвоить ложный контекст свойству - или можно присвоить ему непосредственно, если Вы даете ему общедоступный метод set.

общедоступный класс FtpPresenter: IFtpPresenter {общедоступный SynchronizationContext CurrentContext {добираются; набор;}

   public FtpPresenter() : this(null) { }

   public FtpPresenter( SynchronizationContext context )
   {
       this.CurrentContext = context ?? SynchronizationContext.Current;
   }

   void _view_GetFilesClicked(object sender, EventArgs e)
   {
     ....
     new Thread(new ThreadStart(delegate
        {
            var files = _ftpService.GetFiles(settings);
            this.CurrentContext.Send(delegate
            {
                _view.FilesDataSource = files;
                _view.StatusMessage = Messages.Done;
            }, null);
        })).Start();

    ...
   }

Еще одно наблюдение, что я сделал бы, состоит в том, что я, вероятно, сделал бы, чтобы Ваш предъявитель зависел от интерфейса к классу Потока, а не на Потоке непосредственно. Я не думаю, что Ваши модульные тесты должны создавать новые потоки, а скорее взаимодействовать с ложным классом, который просто гарантирует, что правильные методы создать потоки называют. Вы могли ввести ту зависимость также.

Если SynchronizationContext. Текущий не существует, когда конструктора вызывают, Вы, возможно, должны переместить логику присвоения в Текущий в метод считывания и сделать ленивую загрузку.

3
ответ дан 7 December 2019 в 14:39
поделиться

Вы имеете к большой логике приложения в Вашем предъявителе. Я скрыл бы контексты и потоки в конкретной модели и протестировал бы одну только функциональность.

1
ответ дан 7 December 2019 в 14:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: