2010-07-28 18 views
8

İçerik denetimleri ve OpenXML SDK kullanarak ms word belge üretimi gerçekleştiriyorum. Bu kod için bazı otomatik testler yapmak istiyorum (birim testleri veya bazı kolay UI otomasyon testleri).Otomatik Test OpenXML SDK

MS Word belge nesnesini test etme konusunda herhangi biri bir başkası var mı? Olası seçenekler nelerdir?

Şimdiden teşekkürler!

+0

Neden açık XML birim test standardından daha farklı olmak zorunda. Belgenin kelime içinde açılıp açılmayacağını veya iyi görünüp görünmeyeceğini doğrulamaya çalışıyor musunuz? –

+0

Farklı değil, sadece teknik olarak zor. Tipik test, Düzenleme-Hareket Ettirme'dir. Öyleyse soru, son bölümü nasıl kolayca yapabiliriz - Assert. Muhtemelen bazı kelime otomasyon veya UI otomasyon çerçevesini kullanarak, ancak bunu yapmak için kolay bir yol görmüyorum. Sonuç olarak, rapor üreten ve kelime olarak açılmış testlerle sona erdiğim için, raporun iyi olup olmadığını manuel olarak kontrol ediyorum. Bu "saf" birim testi değil, gerekli raporları oluşturmak için tam uygulamayı çalıştırmaktan daha iyi. Ayrıca, Açık XML ile doğrudan çalıştığım kodları test ettim, diğer tüm parçaları ayırdım ve her zamanki birim testleri ile test ettim. – Andrii

cevap

5

Hayır, MS Word Belgesi nesil birim test yapmadım ama Ingo Vals söylediği gibi, bu birim test başka bir biçimde herhangi bir farklı olmamalıdır.

1) [İsteğe bağlı - Eğer ihtiyaçları için SDK doğru kullanımını anlamak sağlamak için]. Uygulamanızın SDK'yi nasıl sürmesi gerektiğini öğrenin. İstenen işlevselliği taklit eden bazı test komut dosyaları yazın ve oluşturdukları Word belgelerinin beklentilerinizi karşıladığından emin olun.

2) Eğer dokümantasyon üretimi için ihtiyaç işlevselliği karşılık yöntemleri içermesi bir arayüz (veya arayüzler) oluşturun. Not: Arayüzün OpenXML SDK'sının tam işlevselliğini sunması gerekmez - sadece uygulamanız için ihtiyaç duyduğunuz işlevler.

3) açık XML SDK

4) yararlanın çağrıları, doküman üretimini gerçekleştirmek için uygulamada oluşturulan arayüz iletir senin arayüzü somut bir uygulama oluşturun.

5) Kullanım NUnit ve NMock (veya benzeri) Başvurunuzun nesil tabakasını sürücü birim testleri yazmak için. Bu testler, somut uygulamanın bir örneğinden ziyade alaylı bir arayüz kullanmalıdır. Artık testlerinizde, üretim katmanınızın beklediğiniz gibi davrandığını iddia edebilirsiniz. Openxml Sdk 2.0 ve geçerli koduyla ilgili

+0

Cevabınız için teşekkürler, ancak açık XML SDK'yı doğrudan yöneten kodları test etmekte yakalandım. Geri kalan her şey ayrılabilir ya da alay edebilir, bu açıktır. Açık XML SDK'yi çağırmak için kullanılan kodlamaları kullanmak benim sevdiğim şey değildir, test etmek istediğim şey kodumun SDK ile iyi çalışmasıdır. Birisi, saf bir birim testi olmadığını, ancak şu andaki testimde gerçekten eksik olan şey olduğunu iddia edebilir. – Andrii

+1

Tanımladığım, kodunuzu test eden birimdir. Entegrasyon testi istediğin şeyi arardım. Bu durumda, SDK'yı Word XML çıktısını alabilir ve sonuçta ortaya çıkan DOM'ı beklediğiniz DOM ile karşılaştıran bir yöntem yazabilirsiniz. –

+0

Yep, birim veya entegrasyon veya UI otomasyon veya ne işe yarıyor. Doğrulama yapılmasına izin verecek herhangi bir otomatik test türünü özetlemek için (Testin bir kısmını belirtin). DOM karşılaştırmasını kontrol eder. Çok teşekkürler! – Andrii

2

aslında elektronik tablolar için açık XML SDK ile benzer bir şey yapıyorum ve ben aslında sadece dosyayı açar açık XML aPI kodu yazmak olmadığını söylüyor bir strea Test amacıyla m. Birim Testleri, gerçekten geçerli bir dosya olup olmadığını bilmeniz gerektiğinden size yeterince bilgi vermez.

// There should be a sheet for every team 
[TestMethod] 
[HostType("Moles")] 
public void CaseExportTeamSheetsTest() 
{ 
    IRepository<ServiceTbl, ServiceTbl> ServiceRepository; 
    CaseController target; 
    BuildCaseControllerMoledCases(out ServiceRepository, out target); 
    FileStreamResult actual = target.Export(); using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Open(actual.FileStream, false)) 
    { 
     var services = ServiceRepository.All; 

     foreach (var item in services) 
     { 
      // get a worksheet foreach service 
      var sheets = spreadsheetDocument.WorkbookPart.Workbook.Descendants<Sheet>().Where(s => s.Name == item.ServiceName); 
      Assert.IsTrue(sheets.Count() > 0); 
     } 
    } 

    actual.FileStream.Close(); 
    actual.FileStream.Dispose(); 
} 
İlgili konular