2016-04-01 19 views
0

Başka bir program tarafından yapılan testlerin yürütülmesini otomatikleştirmek için bir proje üzerinde çalışıyorum. Bu nedenle, farklı test takımları hakkında bilgi sahibi olan bir sınıfım var (temel olarak kategoriler) ve her test paketi testleri tutuyor.Veri toplama sınıfını, herkese açık erişime izin vermeden başka bir meclisten güncelleyin

Test bilgilerini içeren dosyalar ya programla aynı bilgisayardadır ya da SSH üzerinden erişilmelidir, bu yüzden TestSuitesInfo kapsayıcı sınıfını doldurmak için iki farklı sınıfım var.

Bu iki sınıf

ayrı düzeneklerde, bu yüzden, bir güncelleştirme yöntemi TestSuiteInfo nesnesi geçen bir güncelleme arabirimi oluşturuldu:

public interface ITestSuitesUpdater 
{ 
    void Update(TestSuitesInfo info); 
} 

Buradaki sorun birinin TestSuiteInfo nesnesine başvuru depolamak ve verebilecek olan Güncelleme yöntemi çağrılmadığında değiştirin.

Bir çözüm için ilk yaklaşımım, nesne güncelleştirilip yüklenemediğini belirten bir boole oluşturmak ve eğer değilse, bir AccessViolationException atmaktı. Ancak, sadece bana doğru bakmadı:

public class TestSuitesInfo 
{ 
    private IDictionary<string, TestSuite> _testSuites; 
    private bool _updateable = false; 

    internal TestSuitesInfo(IDictionary<string, TestSuite> dictionary) 
    { 
     _testSuites = dictionary; 
    } 

    public void AddTestSuite(string name) 
    { 
     if (String.IsNullOrWhiteSpace(name)) 
      throw new ArgumentNullException(nameof(name)); 

     if (!_updateable) 
      throw new AccessViolationException("TestSuiteInfo already created!"); 

     if (_testSuites.ContainsKey(name)) 
      return; 

     _testSuites.Add(name, new TestSuite(name)); 
    } 
... 
} 

Bir TestSuitesInfoBuilder sınıfını yazma ve geçen sona erdi yerine beni TestSuitesInfo yeni bir örneğini güncelleme yöntemi s olsun her zaman oluşturarak yapar TestSuitesInfo kendisinin aradı.

Şimdi, bu soruna daha iyi bir çözüm varsa merak ediyorum.

Kimin internals testi projeye görünür olması gerekir sınıfına this attribute koyabilirsiniz

cevap

0

:

[montaj: InternalsVisibleTo ("YourTestAssemblyName)] hızlı cevap için

+0

teşekkürler ama bu durumda her şey ayarlanır iç benim durumumda bir çözüm olmayan diğer meclise görünür olurdu –

İlgili konular