2016-04-12 32 views
1

Daha fazla ayrıntı vermek için, üç çerçevede (UI uyarısı için Selenium kullanılarak) çoğaltılmasını istediğimiz bir dizi testimiz var: IE, Mozilla ve Chrome. İlk çözüm, testlerin ayrı test sınıflarında kopyalanmasıydı, yani her bir test sınıfı, kurucuda farklı bir çerçeve ile aynı 20 test vakasına sahipti.Birden çok çerçevede (internet tarayıcıları) otomatik entegrasyon testlerini çoğaltma çabaları olmadan nasıl kullanabilirim?

/// <summary> 
    /// The non-default constructor that initializes 
    /// necessary instances of objects that are being used 
    /// </summary> 
    public VerifyViewUsingChrome() { 
     _testBases = new Dictionary<FunctionalTestBase.DriverType, TestBase>(); 
     _testBases.Add(FunctionalTestBase.DriverType.Chrome, new TestBase(FunctionalTestBase.DriverType.Chrome)); 
     _testBases.Add(FunctionalTestBase.DriverType.IE, new TestBase(FunctionalTestBase.DriverType.IE)); 
     _testBases.Add(FunctionalTestBase.DriverType.FireFox, new TestBase(FunctionalTestBase.DriverType.FireFox)); 
    } 


    /// <summary> 
    /// Our simple country display test. 
    /// </summary> 
    [InlineData(FunctionalTestBase.DriverType.Chrome)] 
    [InlineData(FunctionalTestBase.DriverType.FireFox)] 
    [InlineData(FunctionalTestBase.DriverType.IE)] 
    [Theory] 
    public void TestADisplayedForACountry(FunctionalTestBase.DriverType testBase) { 
     _testBases[testBase].TestADisplayedForACountry(); 
    } 

olan bazı gerektiren bu uygulama ile sorun 3 uygulamalar her bir test için çalışıyor olması yani: ikinci çözelti, bir giriş olarak, her çerçeve tipi ile parametreli girişler (veya bir xunit teori) kullanmaktı havai. İdeal olarak, tüm IE testlerini çalıştırırız, daha sonra Firefox çerçevesini oluşturup Chrome ile devam etmeden önce bu testleri çalıştırırız.

Bir test çerçevesi kullanmak mümkün olmayabilir, ancak derleme sunucumuzla uygun bağlantılarımız vardır, bu nedenle test formatını korumak ideal olacaktır.

+1

Selenium kullanıyor musunuz? – trailmax

+0

Evet. Bu yüzden UI'yi uyarıyoruz. –

+1

Belki de bu soru veya etiketlerde belirtilmelidir. Ama artık ter yok - size uygun çözümü buldunuz. – trailmax

cevap

1

Sadece çözümün düşündüğümden daha basit olduğunu anladım. Kurucu her testten önce çağrılır, böylece testlerin nasıl yürüdüğüne bakılmaksızın çerçeve başlangıcı ve yırtma işlemi gerçekleşir (önceki testlerden herhangi bir kanama istemediğiniz için anlamlıdır). biz istedik tam olarak nasıl

/// <summary> 
    /// The non-default constructor that initializes 
    /// necessary instances of objects that are being used 
    /// </summary> 
    public VerifyViewUsing() { } 


    /// <summary> 
    /// Our simple country display test. 
    /// </summary> 
    [InlineData(FunctionalTestBase.DriverType.Chrome)] 
    [InlineData(FunctionalTestBase.DriverType.FireFox)] 
    [InlineData(FunctionalTestBase.DriverType.IE)] 
    [Theory] 
    public void TestADisplayedForACountry(FunctionalTestBase.DriverType testBaseType) { 
     TestBase testBase = new TestBase(testBaseType); 
     testBase.TestADisplayedForACountry(); 
    } 

Bu fonksiyonlar oldukça fazla: Burada

biz yapmaya karar budur. Her test bağımsızdır, çerçeveler arasında çoğaltılır ve kullanılan çerçeveye bağlı sonuçlar ile çalışır.

Düzenleme: Gerçek bir iyi yöntem bu olacaktır: Bu, çerçeveler bir kez tanımlamak ve proje genelinde bunları kullanmak için izin verir

public static IEnumerable<object[]> DriverTypes { 
     get { 
      // Or this could read from a file. :) 
      return new[] 
      { 
       new object[] { FunctionalTestBase.DriverType.Chrome }, 
       new object[] { FunctionalTestBase.DriverType.IE}, 
       new object[] { FunctionalTestBase.DriverType.FireFox} 
      }; 
     } 
    } 
    /// <summary> 
    /// Verifies that Brucellosis is displayed in the Disease List for 
    /// Zimbabwe 
    /// </summary> 
    [Theory, MemberData("DriverTypes")] 
    public void TestClickingADiseaseLinkDisplaysACreatePage(FunctionalTestBase.DriverType testBaseType) { 
     TestBase testBase = new TestBase(testBaseType); 
     testBase.TestClickingADiseaseLinkDisplaysACreatePage(); 
    } 

.