Я обрабатываю модульные тесты резьбовых компонентов так же, как я обрабатываю любой модульный тест, то есть с инверсией элементов управления и изоляции. Я развиваюсь на .Net-арене, и из коробки очень важно, чтобы потоки (между прочим) очень сильно (я бы сказал, почти невозможно) полностью изолировать.
Поэтому я написал обертки, которые выглядят что-то вроде этого (упрощенное):
public interface IThread
{
void Start();
...
}
public class ThreadWrapper : IThread
{
private readonly Thread _thread;
public ThreadWrapper(ThreadStart threadStart)
{
_thread = new Thread(threadStart);
}
public Start()
{
_thread.Start();
}
}
public interface IThreadingManager
{
IThread CreateThread(ThreadStart threadStart);
}
public class ThreadingManager : IThreadingManager
{
public IThread CreateThread(ThreadStart threadStart)
{
return new ThreadWrapper(threadStart)
}
}
Оттуда я могу легко вставить IThreadingManager в свои компоненты и использовать свою изоляционную схему выбора, чтобы заставить поток вести себя так, как я ожидаю во время теста.
Это до сих пор работало отлично для меня, и я использую тот же подход для пула потоков, вещи в System.Environment, Sleep и т. д. и т. д.
Я использую клон для:
Бывшее использование довольно редко для меня - главным образом, когда я пробую идею, я мог бы хотеть полностью отказаться. Если я захочу объединиться, я захочу объединить ВСЕ изменения. Этот вид ветвления главным образом для отслеживания ответвлений различных разработчиков, таким образом, они не тревожат друг друга. Просто для уточнения эта последняя точка:
ответвления функции For, или дольше жил ответвления, я использую названные ответвления, которые более удобно совместно используются репозиториями без слияния. Также "чувствует себя" лучше, когда Вы хотите выборочно объединиться.
В основном я смотрю на него этот путь:
Это - мое взятие, хотя действительно это - вопрос политики.
У меня есть другая опция для Вас изучить: подвижные очереди.
идея, для имения стопки патчей (никакие фиксации, "реальные" патчи) ontop текущего рабочего каталога. Затем можно добавить или удалить применяемые патчи, добавить один, удалить его, добавьте другого другой и т.д. Один единственный патч или подмножество их заканчиваются, чтобы быть новой "функцией", поскольку Вы, вероятно, хотите сделать с ответвлениями. После этого можно применить патч, как обычно (так как это - изменение). Ответвления, вероятно, более полезны, если Вы работаете с кем-то еще...?
В вопросе 1 вам нужно немного пояснить, что вы подразумеваете под «изменениями». Что из этого вы имеете в виду:
Если вы имеете в виду пункт 1, вам следует изучить расширение Transplant , в частности идею выбора пары наборы изменений.
Если вы имеете в виду пункт 2, вы должны сделать следующее:
hg revert -r <ветка, которую вы хотите объединить> --include <файлы для обновления>
, чтобы изменить содержимое этих файлов на то, как оно находится в другой ветке. hg commit
, чтобы зафиксировать эти изменения в ветке в качестве нового набора изменений. Что касается вопроса 2, я никогда не использую клоны репозитория для разветвления, поэтому я не знаю. Я использую именованные ветки или анонимные ветки (иногда с закладками).