BLOGas.lt
Sukurk savo BLOGą Kitas atsitiktinis BLOGas

.gitignore skirtas .NET

Parašė Sergejus | 2012-01-17 00:30

Kadangi DotNetGroup 3.0 platformos kūrimui naudojama Git versijavimo sistema, nusprendžiau pasidalinti savo .gitignore failu, skirtu .NET projektams. Failą patalpinau GitHub Gist, tad siūlykite savo papildymus!

#ignore thumbnails created by windows
Thumbs.db
#ignore files build by Visual Studio
*.obj
*.exe
*.pdb
*.user
*.aps
*.pch
*.vspscc
*_i.c
*_p.c
*.ncb
*.suo
*.tlb
*.tlh
*.bak
*.cache
*.ilk
*.log
[Bb]in
[Dd]ebug*/
*.lib
*.sbr
obj/
[Rr]elease*/
_ReSharper*/
[Tt]est[Rr]esult*
*.dotCover
*.ReSharper
packages

Rodyk draugams

Savaitės video - When strange things happen in .Net programs

Parašė Sergejus | 2011-12-23 00:20

Šį kartą jūsų dėmesiui siūlau labai įdomų Romualdo Stonkaus pristatymą When strange things happen in .Net programs.

Rodyk draugams

Patogi ir funkcionali Windows konsolės atmaina

Parašė Sergejus | 2011-11-10 21:31

Prieš kelias savaites TechDay Lithuania konferencijoje dariau pristatymą iš ASP.NET optimizavimo ir dalis demonstracijų vyko tiesiai komandinėje eilutėje. Kai kurie dalyviai pastebėjo, kad aš nesinaudojau standartine konsole, o kažkuo panašiu į tai:

image

Tai yra ypatingai patogi bei funkcionali standartinės Windows konsolės atmaina - Console2. Console2 sukonfigūravau taip:

  • Ctrl-T – nauja konsolės kortelė
  • Ctrl-P – nauja PowerShell kortelė
  • Ctrl-W – kortelės uždarymas
  • Ctrl-V – teksto įterpimas
  • Teksto pažymėjimas ir kopijavimas su Shift + pele
  • Integracija su Visual Studio Command Prompt
  • Permatomas fonas

Konfigūracijos failą galite parsisiųsti ir pasidėti šalia Console.exe.

Rodyk draugams

Nuosava diegimo repozitorija Web Platform Installer pagrindu

Parašė Sergejus | 2011-04-26 14:56

Paskutiniu metu su kolegomis vystome idėją, kaip sukurti mūsų sistemos centrinę diegimo repozitoriją. Kadangi sistema yra kompleksinė ir sudaryta iš daugelio modulių, aplikacijų ir trečių šalių programinės įrangos (IIS, SQL Server ir panašiai), sistemos diegimas į naujus serverius nėra trivialus uždavinys su daug priklausomybių ir griežtai apibrėžta diegimo tvarka. Mums norėtųsi visą serverio diegimo procesą suvesti iki kelių mygtukų paspaudimo.

Kadangi dviračio išradinėti nesinorėjo, pradėjome analizuoti kokius egzistuojančius sprendimus mes galime pernaudoti. Iš karto krito į akis Microsoft Web Platform Installer 3.0.

image

Web Platform Installer, arba sutrumpintai WebPI, atlieka labai panašią užduotį: leidžia instaliuoti produktus ir aplikacijas, sužiūri visas priklausomybes ir automatiškai parsiunčia trūkstamus komponentus. Atrodo patraukliai, bet kaip WebPI praplėsti pagal mūsų poreikius? Pasirodo, WebPI produktų metaduomenų aprašymui naudoja Atom ir turi galimybę praplėsti produktų sąrašą nurodant nuosavus Atom failus. Dar daugiau, visą tai galima daryti ne tik iš grafinės sąsajos, bet ir iš komandinės eilutės, tereikia parsisiųsti WebPI Command Line.

Įsitikinę, kad WebPI vertas tolimesnio nagrinėjimo, perėjome prie jo funkcionalumo ir galybių analizės. Geriausias būdas išmokti kaip veikia ir ką gali WebPI – išanalizuoti esamus Atom failus kataloge %localappdata%\Microsoft\Web Platform Installer. Taip pat labai padėjo WebPI schemos aprašas. Žemiau pateiksiu tokio Atom failo pavyzdį:

<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <webpiFile version="3.0.0.0" />

  <title>Tools Platform Installer 3.0 Feed</title>
  <link href="http://www.microsoft.com/web/webpi/3.0/ToolsProductList.xml" />
  <updated>2009-3-17T16:30:00Z</updated>
  <author>
    <name>Microsoft</name>
    <uri>http://www.microsoft.com/</uri>
  </author>
  <id>http://www.microsoft.com/web/webpi/3.0/ToolsProductList.xml</id>

  <!-- Resources -->
  <resourcesList>
    <resources>
      <culture>en</culture>
      <!-- included in file -->
    </resources>
    <resources>
      <culture>de</culture>
      <url>http://www.microsoft.com/web/webpi/3.0/resources/ToolsProductList_de.xml</url>
    </resources>
  </resourcesList>

  <!--Language Codes-->
  <languages>
    <language default="true">
      <languageId>en</languageId>
      <name resourceName="Lang_en_Name">English</name>
    </language>
  </languages>

  <!-- Windows Azure SDK -->
  <entry>
    <productId>WindowsAzureSDK</productId>
    <title resourceName="Entry_WindowsAzureSDK_Title">Windows Azure SDK</title>
    <version>1.4</version>
    <summary resourceName="Entry_WindowsAzureSDK_Summary">
	The Windows Azure SDK Version 1.4 provides developers with tools and APIs for building
    scalable services for deployment to Windows Azure.
	</summary>
    <longSummary resourceName="Entry_WindowsAzureSDK_LongSummary">
	The Windows Azure Platform is an Internet-scale cloud services platform hosted through
    Microsoft data centers. The platform includes the Windows Azure operating system and a
    set of rich developer services.
	</longSummary>
    <link href="http://msdn.microsoft.com/en-us/library/dd179367.aspx" />
    <author>
      <name>Microsoft Corporation</name>
      <uri>http://www.microsoft.com/</uri>
    </author>
    <images>
      <icon>http://www.microsoft.com/web/media/gallery/apps-screenshots/wa_vs_graphic.png</icon>
    </images>
    <published>2011-04-11T12:00:00Z</published>
    <discoveryHint>
      <or>
       <discoveryHint>
        <registry>
          <keyPath>HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\ServiceHosting\v1.0</keyPath>
          <valueName>FullVersion</valueName>
          <valueValue>1.4.20227.1419</valueValue>
        </registry>
       </discoveryHint>
       <discoveryHint>
        <registry>
          <keyPath>HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\ServiceHosting\v1.0</keyPath>
          <valueName>FullVersion</valueName>
          <valueValue>1.4.20407.2049</valueValue>
        </registry>
       </discoveryHint>
      </or>
    </discoveryHint>
    <dependency>
      <and>
        <dependency>
          <productId>ASPNET</productId>
        </dependency>
        <dependency>
          <productId>CGI</productId>
        </dependency>
        <dependency>
          <productId>NETFramework35</productId>
        </dependency>
        <dependency>
          <productId>PowerShell</productId>
        </dependency>
        <dependency>
          <productId>IISManagementConsole</productId>
        </dependency>
      </and>
    </dependency>
    <updates>
      <productId>AzureSDKRefresh_14</productId>
    </updates>
    <installers>
      <installer>
        <id>1</id>
        <languageId>en</languageId>
        <architectures>
          <x86 />
        </architectures>
        <osList>
          <os>
            <minimumVersion>
              <osMajorVersion>6</osMajorVersion>
              <osMinorVersion>0</osMinorVersion>
              <spMajorVersion>0</spMajorVersion>
            </minimumVersion>
            <osTypes>
              <Server />
              <Ultimate />
              <Enterprise />
              <Business />
              <HomePremium />
            </osTypes>
          </os>
        </osList>
        <eulaURL>http://www.microsoft.com/web/webpi/eula/EulaWindowsAzureSDKFINAL.htm</eulaURL>
        <installerFile>
          <!-- size of the package in KBs -->
          <fileSize>9349</fileSize>
          <installerURL>http://download.microsoft.com/download/3/3/2/3321A9FA-64C3-463F-981A-4E17FC29B15B/WindowsAzureSDK-x86.exe</installerURL>
          <displayURL>http://msdn.microsoft.com/en-us/library/dd179367.aspx</displayURL>
        </installerFile>
        <helpLink>http://msdn.microsoft.com/en-us/library/dd179367.aspx</helpLink>
        <installCommands>
          <cmdline>
            <exe>%InstallerFile%</exe>
            <commandLineArguments>/quiet /norestart</commandLineArguments>
          </cmdline>
        </installCommands>
      </installer>
      <installer>
        <id>2</id>
        <languageId>en</languageId>
        <architectures>
          <x64 />
        </architectures>
        <osList>
          <os>
            <minimumVersion>
              <osMajorVersion>6</osMajorVersion>
              <osMinorVersion>0</osMinorVersion>
              <spMajorVersion>0</spMajorVersion>
            </minimumVersion>
            <osTypes>
              <Server />
              <Ultimate />
              <Enterprise />
              <Business />
              <HomePremium />
            </osTypes>
          </os>
        </osList>
        <installerFile>
          <!-- size of the package in KBs -->
          <fileSize>9264</fileSize>
          <installerURL>http://download.microsoft.com/download/3/3/2/3321A9FA-64C3-463F-981A-4E17FC29B15B/WindowsAzureSDK-x64.exe</installerURL>
          <displayURL>http://msdn.microsoft.com/en-us/library/dd179367.aspx</displayURL>
        </installerFile>
        <helpLink>http://msdn.microsoft.com/en-us/library/dd179367.aspx</helpLink>
        <installCommands>
          <cmdline>
            <exe>%InstallerFile%</exe>
            <commandLineArguments>/quiet /norestart</commandLineArguments>
          </cmdline>
        </installCommands>
      </installer>
    </installers>
  </entry>
</feed>

Kaip matyti, failo struktūra yra aiški ir nereikalaujanti išsamaus paaiškinimo. Norėtųsi aptarti tik keletą elementų:

  • productId – unikalus produkto ID, kuris bus naudojamas tiek norint instaliuoti produktą, tiek jį įtraukiant kaip priklausomybę ar atnaujinimą;
  • discoveryHint – naudojamas tikrinant ar produktas jau yra suinstaliuotas, nusakant registry, file ar msiProductCode;
  • dependency – nurodo nuo kokių kitų produktų priklauso duotasis produktas; gali būti naudojami or/and operatoriai; visos priklausomybės bus sudiegtos (jeigu dar nėra) prieš diegiant duotąjį produktą;
  • updates – nurodo kokius atnaujinimus reikia sudiegti duotajam produktui; gali būti naudojami or/and operatoriai; visi atnaujinimai bus sudiegti sudiegus duotąjį produktą;
  • installers – išvardinami visi įmanomi diegėjai, nurodant kokia architektūra ir operacijų sistema yra palaikomos; jeigu diegėjas yra universalus – viską galima sutraukti į vieną įrašą;
  • installCommands – naudojamas elemento installers viduje ir nusako kaip bus vykdomas produkto diegimas; galimos reikšmės: cmdline, msiInstall ar msuInstall; praktikoje mums užteko cmdline.

Žinodami kaip atrodo ir iš ko susideda WebPI Atom failas, nesunkiai pasirašėme savo. Dabar tik reikėjo prijungti nuosavą Atom failą prie WebPI ir WebPI Command Line. Pirmu atveju, tai daroma iš nustatymų:

image

image

Antru atveju, tiesiogiai komandinėje eilutėje:

WebpiCmdLine.exe /AcceptEula /XML:http://localhost/products.xml /Products:MyProduct

Aukščiau pateikta komanda sudiegs MyProduct ir visas meta duomenyse nurodytas priklausomybes bei atnaujinimus. Paprasta ir efektyvu!

Jeigu susidomėjote, dar keletas naudingų nuorodų:

Rodyk draugams

IIS7 klaida "HTTP Error 500.19 - Internal Server Error"

Parašė Sergejus | 2010-12-29 21:56

Darbe kolegos susidūrė su įdomia IIS 7 problema, kuri pasireiškė tam tikruose Windows Server 2008 serveriuose. Sudiegus ASP.NET MVC 2 aplikaciją ir bandant ją pakrauti – įvykdavo IIS klaida „HTTP Error 500.19 - Internal Server Error“.

Module: IIS Web Core

Notification: BeginRequest

Handler: Not yet determined

Error Code: 0×80070021

Config Error This configuration section cannot be used at this path. This happens when the section is locked at a parent level. Locking is either by default (overrideModeDefault="Deny"), or set explicitly by a location tag with overrideMode="Deny" or the legacy allowOverride="false".

Sprendimas (net keli) pasirodo yra paprastas, bet pakankamai sunkiai surandamas. Klaidos priežastis – nauja IIS 7 galimybė Feature Delegation, kuri leidžia uždrausti keisti tam tikrus IIS nustatymus, kaip, pavyzdžiui, pridėti naujus modulius (angl. modules). Šiuo atveju, reikėjo leisti keisti modules ir handlers nustatymus iš aplikacijos Web.config failo.

Sprendimo būdas #1 (iš IIS Manager)

IIS Manager lange pasirinkite Feature Delegation punktą:

image

Suraskite punktą Modules ir iš kontekstinio meniu pasirinkite Read/Write:

image

Pakartokite tą pati su Handlers.

Sprendimo būdas #2 (iš komandinės eilutės)

Įvykdykite žemiau pateiktas komandas iš komandinės eilutės (administratoriaus teisėmis):

%windir%\system32\inetsrv\appcmd.exe unlock config /section:system.webServer/handlers

%windir%\system32\inetsrv\appcmd.exe unlock config /section:system.webServer/modules

Sprendimo būdas #3 (iš konfigūracijos failo)

Atidarykite globalų IIS konfigūracijos failą %windir%\system32\inetsrv\config\applicationHost.config. Jame suraskite sekciją modules:

<section name="modules" allowDefinition="MachineToApplication" overrideModeDefault="Deny" />

Pakeiskite į overrideModeDefault="Allow".

Pakartokite tą pati su handlers ir išsaugokite pakeitimus.

 

Tikiuosi šis straipsnis ateityje išsaugos jums laiką ieškant šios problemos sprendimo būdų.

Rodyk draugams

FTP over SSL konfigūravimas IIS 7 ir jo panaudojimas iš C#

Parašė Sergejus | 2010-12-27 21:24

FTP yra vienas iš seniausių failų mainų protokolų, kuriam Microsoft, mano manymu, skyrė neypatingą dėmesį. Apart tradicinio, nesaugaus FTP protokolo, egzistuoja dvi jo variacijos: FTP over SSH, dar žinomas kaip Secured FTP arba SFTP bei FTP over SSL, dar žinomas kaip FTPS. Iki šiol nei viena, nei kita saugaus FTP atmaina nebuvo oficialiai palaikoma IIS, todėl tekdavo naudoti trečios šalies FTP serverius. Laimei, atsirado galimybė parsisiųsti FTP Publishing Service, skirtą IIS 7 ir naujesnėms versijoms.

Konfigūravimas

Suinstaliavus FTP Publishing Service, IIS Manager atsiras nauji su FTP susiję punktai:

image

Prieš pradedant konfigūruoti FTP over SSL, pirma reikia sugeneruoti SSL sertifikatą, tai galima padaryti paspaudus ant Server Certificates ir pasirinkus punktą Create Self-Signed Certificate:

image

Norėdami pridėti naują FTPS saitą, užtenka paspausti dešiniu pelės mygtuku ant katalogo Sites ir pasirinkti Add Ftp Site. Atsiradusiame lange įvedame FTP pavadinimą bei fizinį adresą. Kitame vedlio žingsnyje reikalaujame SSL panaudojimą bei nurodome prieš tai sugeneruotą sertifikatą:

image

Paskutiniame dialogo lange nurodome kas galės prieiti prie mūsų FTP, mano atveju, specialiai sukurtas vartotojas ftpuser:

image

Štai ir viskas, tai yra minimaliai reikalinga FTP over SSL konfigūracija skirta IIS 7.

FTPS panaudojimas

Žemiau pateiktas kodo pavyzdys, parodantys kaip prisijungti prie FTP over SSL:

static void Main(string[] args)
{
    ServicePointManager.ServerCertificateValidationCallback =
        (sender, certificate, chain, sllPolicyErrors) => true; 

    const string url = "ftp://localhost/";
    var ftp = (FtpWebRequest)WebRequest.Create(url);
    ftp.Credentials = new NetworkCredential("ftpuser", "ftp");
    ftp.UsePassive = true;
    ftp.EnableSsl = true;
    ftp.Method = WebRequestMethods.Ftp.ListDirectory;
    var response = (FtpWebResponse)ftp.GetResponse();

    using(var reader = new StreamReader(response.GetResponseStream()))
    {
        Console.WriteLine(reader.ReadToEnd());
    }

    Console.ReadKey();
}

Atkreipkite dėmesį į delegatą ServicePointManager.ServerCertificateValidationCallback. Kadangi aš naudoju taip vadinamą Self-Signed sertifikatą, įprastas FtpWebRequest išmestų su sertifikatu susijusią klaidą. Vienas iš apėjimo variantų – nurodyti sertifikato tikrinimo delegatą, kuris tiesiog visada grąžina true.

Tikiuosi šis straipsnis padės jums greičiau sukonfigūruoti bei pasinaudoti FTP over SSL.

Rodyk draugams

Web puslapių testavimas su WatiN

Parašė Sergejus | 2009-05-10 17:26

Kaip ir žadėjau, šį kartą parodysiu kaip galima supaprastinti Web puslapių automatinį testavimą naudojant WatiN biblioteką. Iš karto noriu pabrėžti, nors šiuo metu ir egzistuoja WatiN Test Recorder, kuris moka fiksuoti visus atliekamus veiksmus puslapyje ir pagal tai generuoti testavimo kodą, ilgesnei perspektyvai – nemanau kad tai yra geras sprendimas. Generuojamas kodas yra sunkiai palaikomas ir atnaujinamas. Būtent dėl šios priežasties, visus grafinės sąsajos testus aš rašau rankomis, o negeneruoju.


Jeigu atsimenate, Web puslapių automatinio testavimo karkasų palyginime aš pažymėjau, kad WatiN turi keletą trūkumų. Taigi pirma aprašysiu pagalbinę WebTestHelper klasę, kuri ir skirta minėtoms problemoms spręsti:



Pirmas metodas supaprastina paiešką elemento viduje (pavyzdžiui, DIV elemente), antras – apdoroja Microsoft AJAX kvietinius (tame tarpe ir UpdatePanel), o paskutinis – užtikriną saugų darbą su neprivalomais elementais.


Turint šiuos pagalbinius metodus – drąsiai galime pereiti prie bazinės klasės aprašymo:



Paaiškinsiu svarbiausias klasės vietas. ApplicationUrl savybė nuskaito testuojamos Web aplikacijos kelią (pavyzdžiui, http://server/WatiNDemo). CreateBrowser metodas naudojamas kaip fasadas reikalingos naršyklės sukūrimui. Jeigu reikės vykdyti testus ne tik su Internet Explorer, bet ir su FireFox ar Chrome – užteks logiką pakeisti tik šioje vietoje. WatiN turi pakankamai lankstų API, kas leidžia Initialize() metode paieškai pagal ID nurodyti nuosavą algoritmą klasės FindByAspIdFactory dėka. Kaip ir seka iš pavadinimo, ji specialiai skirta ASP.NET ir atrodo taip:



Štai mes ir turime visus reikalingus griaučius ir galime tiesiogiai pereiti prie Web puslapio testavimo. Tam naudosime tokį paprastą ASPX:



Puslapyje atvaizduojamas įvedimo laukelis, išskleidžiamas sąrašas bei mygtukas Prisijungti, paspaudus kurį, rodomas pranešimas „Prisijungęs“. Šio puslapio testas, tikrinantis Login funkcionalumą, galėtų atrodyti taip:



Pirmas dalykas ką aš darau rašant UI testus – apgaubiu UI elementus į atitinkamo tipo savybes. Tai leidžia atskirti testavimo logiką nuo grafinių elementų paieškos (kas dažnai irgi reikalauja nemažai kodo). Rezultate, mes turime labai paprastą, lengvai skaitomą ir palaikomą Web puslapio testą!


Tikiuosi šis straipsnis padės jums naujai pasižiūrėti į UI testavimą. O kaip jus darote UI testavimą? Manau, daugeliui būtų įdomu sužinoti!

Rodyk draugams

WatiN testų vykdymas Team Foundation Server

Parašė Sergejus | 2009-05-07 22:21

Praeitame straipsnyje aprašiau tris populiariausius .NET Web puslapių automatinio testavimo karkasus. Priminsiu, kad man patogiausiu bei labiausiai atitinkančiu mano poreikius pasirodė WatiN. Vienas iš tikslų, kurių norėjau pasiekti – įtraukti Web puslapių grafinės sąsajos testus į naktinį surinkimo procesą (nightly buils) TFS serveryje. Po to, kai aš praleidau kelias valandas bandydamas tai padaryti, nusprendžiau parašyti šį straipsnį – gal kitiems pagelbės!


Pirmiausia reikia įsitikinti, kad Team Foundation Server turi priėjimą prie WatiN naudojamų DLL failų. Savo sprendimuose trečių šalių bibliotekoms aš visada naudoju katalogą Dependencies, todėl šitoje vietoje problemų nekilo. Problema buvo kitur – norint testuoti Web puslapių, Windows formų ar WPF formų grafinę sąsają, surinkimas bei testai turi būti vykdomi taip vadiname TFS interaktyviajame rėžyme. Kaip tokį režimą įjungti?


Pirma iš Visual Studio Team Explorer lango pasirenkame mūsų projektą, tada naudojamą surinkimo agentą (Build Agent):



Nueiname į pasirinkto surinkimo agento nustatymus bei pakeičiame jo portą iš standartinio 9191 į standartinį interaktyvaus režimo portą 9192:



Išsaugojus visus pakeitimus, jungiamės prie serverio, kur suinstaliuotas Team Foundation Server ir paleidžiame TFSBuildService.exe:



Būtent ši programa ir leidžia TFS surinkimo agentui paleisti išorines programas (kaip naršyklę, Windows formą ar WPF formą). Primygtinai siūliau ją įtraukti į automatiškai paleidžiamų programų sąrašą, kad surinkimo metu nekiltų „staigmenų“.


Tiek šiam kartui, tikiuosi šiuo straipsniu aš sutaupysiu bent keliems žmonėms brangų laiką. Kitame straipsnyje aprašysiu bazinę WatiN testų klasę bei keletą pagalbinių metodų darbui su AJAX ir kolekcijomis.

Rodyk draugams

Web puslapių automatinio testavimo karkasai

Parašė Sergejus | 2009-05-04 20:57

Prieš savaitę viename iš projektų nutariau įgyvendinti automatinį Web puslapių testavimą, o tiksliau sakant, automatinį puslapių grafinės sąsajos testavimą. Aš norėjau pakankami galingo testavimo karkaso, kuris integruotųsi tiek į Visual Studio aplinką, tiek į Team Foundation Server.


Palyginimui aš pasirinkau tris, šiuo metu populiariausius .NET platformoje, Web puslapių automatinio testavimo karkasus: Selenium Remote Control, Lightweight Test Automation Framework ir WatiN.


Apie Selenium testavimo karkasą aš girdėjau labai daug teigiamų atsiliepimų tiek iš Java bendruomenės, tiek iš kolegų programuojančių Java. Panašiai gerai Selenium Remote Control gali testuoti ir .NET kodą, bet… net ir .NET kodui jis reikalauja Java virtualios mašinos tiek programuotojų kompiuteriuose, tiek TFS serveryje. Mano noras buvo neprisirišti prie jokių papildomų platformų, išskyrus .NET. Suprantama, apie integraciją su Visual Studio ar Team Foundation Sever irgi šnekos neina…


Antrasis testavimo karkas - Lightweight Test Automation Framework – pasirodė pakankamai įdomus, juolab jį tiesiogiai plėtoja ASP.NET grupė! Iš funkcinės pusės praktiškai neturiu jokių priekaištų: automatinis ASP.NET generuojamų ID palaikymas, AJAX scenarijų palaikymas ir pan. Pagrindinis (ir mano atveju esminis) karkaso trūkumas – testų vykdymui jis naudoja specialiai Microsoft komandos sukurtą puslapį. Tai reiškia, kad nėra tiesioginės integracijos nei su Visual Studio, nei su TFS. Sprendžiant iš komandos narių atsakymo, Microsoft viduje jie turi pačių rašytą integracijos su TFS programą, o integracija su Visual Studio kol kas nėra planuojama.


WatiN testavimo karkasas pasirodė geriausiai atitinkantis mano poreikius. WatiN yra ne savarankiškas testavimo karkasas, o Web puslapių testavimo biblioteka. Tai reiškia, kad ji gali būti naudojama kartu su populiariausiais .NET testavimo karkasais (xUnit, mbUnit, NUnit, MSTest ir pan.), o taip pat, ji puikiai integruojasi tiek su Visual Studio, tiek su Team Foundation Server. Nuo antros versijos WatiN palaiko ne tik Internet Explorer, bet ir FireFox bei Chrome naršykles. Iš funkcinės pusės yra keli priekaištai dėl priėjimo prie ASP.NET elementų pagal ID ir darbo su UpdatePanel, bet po tam tikrų bandymų, problemos buvo išspręstos.


Apibendrinant, bent jau iš trijų išbandytų Web puslapių automatinio testavimo karkasų, labiausiai man patiko WatiN, būtent jį aš dabar ir naudoju savo projektuose.


Kitame straipsnyje aš parodysiu kaip galima integruoti WatiN su Team Foundation Server automatiniu testų vykdymu naktinio surinkimo (nightly builds) metu.

Rodyk draugams

Mano SBToolkit biblioteka CodePlex

Parašė Sergejus | 2009-04-08 20:26

Daugeliui iš mūsų projektuose tenka naudoti tam tikras pagalbines klases, kurios laikui bėgant pasimeta. Prieš metus nusprendžiau sukurti SBToolkit projektą, skirtą asmeniniam naudojimui, kur aš talpinčiau įvairiausias pagalbines klases bei metodus. Nors prie bibliotekos dirbau tik aš, po tam tikro laiko atsirado poreikis versijuoti kodą. Natūralus sprendimas buvo patalpinti biblioteką į CodePlex ir taip gimė sbtoolkit.codeplex.com.


Prieš kelias dienas nusprendžiau viešai pristatyti biblioteką jums ir šiandien su džiaugsmu noriu pranešti, kad jus galite parsisiųsti SBToolkit v0.1. Aš nuoširdžiai tikiuosi, kad jums ji pasirodys naudinga ir pagelbės jūsų projektuose.


Šiuo metu svarstau apie galimybę prijungti ir jus prie bibliotekos plėtojimo, tad jeigu turite noro ir naudingo kodo - rašykite projekto puslapyje! Labai laukiu jūsų komentarų, pasiūlymų bei paraginimų :), nes tai mano pirmi atviro kodo žingsniai.


Žemiau pateikiu klasių sąrašą su trumpu aprašymu (anglų kalba):



  • SBToolkit.Core


    • Cloner - helper class for cloning

    • Converter - helper class for converting any type to nearly any other

    • Hashing - helper class for hashing

    • Reflector - helper class to make reflection easier

    • Validation, ValidationConditions - helper classes for the fluent validation

  • SBToolkit.Utility


    • DITypeMapper - helper dependency injection type mapping class

    • EnumerableHelper - helper class with various IEnumerable<> extension methods

    • FileHelper - helper class to work with files

    • Predicate - helper class for building Lambda predicate expressions

    • QueryableHelper - helper class with various IQueryable<> extension methods

    • SystemDateTime - testable version of DateTime class

    • StringCasing - helper class to make string casing easier

    • StringHelper - helper class with various String extension methods

    • StringNameFormat - helper class provides similar experience to String.Format(), but takes object instance instead of array of arguments

  • SBToolkit.Web


    • ControlHelper - helper class with various Control extension methods

    • FormBinding - helper class provides basic two-way binding functionality for the ASP.NET Web Forms

    • HttpStatusCode - enumeration for different HTTP error codes

    • PageHelper - helper class with various Page extension methods

    • WebControlHelper - helper class with various WebControl extension methods

Rodyk draugams