1

Я установил 64-битный сервер сборки TFS 2008 с Sharepoint, непрерывной интеграцией и готовым MSTest. Единичные тесты для классов простой бизнес-логики выполняются очень хорошо, и результаты тестов публикуются в TFS. Тем не менее, любой тест, который использует API Sharepoint, ужасно, SPFarm.Local возвращает нуль и так далее. Есть ли способ исправить это?Непрерывная интеграция с 64-разрядными Sharepoint и TFS 2008?

Тестирование выполняется отлично в идентичной 32-разрядной среде разработки (Windows Server 2008 под Hyper-V, Sharepoint, исправленной до кумулятивного обновления до июня 2009 года) как из Visual Studio, так и из командной строки, поэтому проблема заключается не в неправильном использование SPContext.Current или любой другой части API, которая должна выполняться в контексте веб-сервера. Я исключил permissions issues, потому что учетная запись агента сборки может развернуть решение и создать семейства сайтов просто отлично с помощью stsadm. Следующим виновником может быть то, что модульные тесты выполнялись с 32-bit process, которые не могли получить доступ к 64-разрядному API Sharepoint должным образом. Я попробовал , но имеет побочный эффект отключения поддержки TFS в MSTest.

Должен ли я ждать версий MS-версий 2010 года (и надеемся на лучшее) или существует ли доступная сторонняя тестовая среда, которая запускается изначально на 64 бит и может публиковать результаты тестов в TFS 2008?

ответ

0

Я тоже сам столкнулся с этой проблемой. После охоты в сети, я, наконец, нашел эту статью: http://fastrup.net/post/Visual-Studio-Unit-Tests-and-64-bit-SharePoint-does-not-play.aspx

Я уже наклонялся в направлении NUnit, чтобы увидеть, будет ли это иметь значение, и теперь я собираюсь исследовать этот проспект и если он работает это будет мой подход. Это разочаровывает, когда вы хотите сделать правильные вещи и единицы тестирования все, что вы делаете, но инструменты не поддерживают среду, в которой вы должны работать.

+0

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

2

Это происходит потому, что SharePoint не имеет контекста в выполняемых тестах. Контекст SharePoint (особенно, думая об объекте SPContext.Current) заполняется только тогда, когда он запускается на странице ASP.NET как часть HTTP-запроса. MSTest этого не делает.

Если вам необходимо выполнить интеграционные тесты (отличные от модульных тестов) от SharePoint API, вы можете использовать Typemock Isolator for SharePoint. Это издевается над этими объектами SharePoint, поэтому они больше не равны нулю. См. Пример Francis Cheung's blog.

Редактировать после комментария: У меня нет прямого опыта с этим, но я не могу думать о какой-либо причине, возникшая проблема между 32-битным и 64-битным. Пожалуйста, внимательно изучите любые различия в окружающей среде и конфигурации.

+0

+1 для справки Typemock Isolator for SharePoint. В последнее время начал изучать этот инструмент myslef. – Colin

+0

В тестах не используется SPContext.Current, и они не используют какие-либо части API, которые используют SPContext внутри (как в моем предыдущем вопросе о PortalSiteMapProvider). Тесты выполняются просто отлично в 32-битной среде, в ином случае. – Hirvox

+0

@ Hirvox: Правильно, вы не упомянули об этом в своем вопросе. Это может быть 64-битная 32-битная вещь, но я думаю, что это разница в среде/config. –

Смежные вопросы