Harici EXE Başlatan Bir Sınıf için Birim Testleri Yazma


9

EXE listesini çalıştırmak için kullanılan bir C # sınıfı yazdım. .

Ekleme, kaldırma, vb. Gibi temel mantığı test edebiliyorum. EXE'leri tutmanın gerçek çalışmasının işe yarayacağını Nasıl Test Ederim?

İlk düşüncem, 1 saniye sonra kendini kapatan bir kukla EXE başlatmak, sonra bunu test etmek için kullanmaktır. Bu Birim Testi alanından mı çıkıyor?

Yanıtlar:


12

İlk düşüncem, 1 saniye sonra kendini kapatan bir kukla EXE başlatmak, sonra bunu test etmek için kullanmaktır. Bu Birim Testi alanından mı çıkıyor?

Bu iyi bir test mi? Tabii, oluşturun. Kelimenin tam anlamıyla "Birim Testi" midir? Ben öyle düşünmüyorum, buna "sistem testi" ya da bunun gibi bir şey diyebilirim, ama bu testi daha az değerli kılmaz.


9

Bundan daha yüksek bir seviyede alay et. Etrafında bir proxy sınıfı oluşturun Process.Start(), bunu testte yapın ve girişi kontrol edin.

public interface IProcessProxy
{
     ProcessInfo Start(string application, string[] arguments);
}

public class ProcessProxy : IProcessProxy
{
    public ProcessInfo Start(string application, string[] arguments)
    {
        return Process.Start(application, arguments);
    }
}

// You could use a mocking framework for this, but for the purposes
// of this example ...
public class FakeProcessProxy : IProcessProxy
{
    private string _expectedApplication;
    private string[] _expectedArguments;
    private ProcessInfo response;

    public FakeProxy(string expectedApplication, string[] expectedArguments, ProcessInfo response)
    {
         _expectedApplication = expectedApplication;
         _expectedArguments = expectedArguments;
    }

    public ProcessInfo Start(string application, string[] arguments)
    {
         // compare input to expectations and throw exception if not matching
         return _response;
    }
}

// You can also use an IoC framework to inject your IProcessProxy, but I won't.
public class ClassUnderTest
{
    public ClassUnderTest(IProcessProxy proxy)
    {
        _proxy = proxy;
    }

    public ClassUnderTest() : this(new ProcessProxy())
    {
    }

    public void MethodUnderTest()
    {
        // Do stuff

        ProcessInfo process = _proxy.Start(@"C:\Program Files\App\App.exe", new[] { "arg1", "arg2" });
        process.WaitForExit();

        if (process.ExitCode == 0)
        {
            // Act on success
        }
        else
        {
            // Act on failure
        }
    }   
}

Uygulama kodunda ClassUnderTest kullanmanız gereken her yerde varsayılan yapıcıyı kullanın. Testlerinizde, beklenen Proxy Başlatma parametrelerini ve sahte yapıcıdaki test sonucunuzu kullanarak diğer kurucuya bir FakeProcessProxy iletin.


4

Ne zaman kesinlikle (vurgu unittesting felsefesini takip birimine ), bir exe dosyası oluşturmak gerekir ama sınıf yumurtlama ve doğru olarak bu süreci takip etmek arayüzleri çağırırsa yerine test edin. Sonuçta, süreç işlemeden sorumlu kütüphane değil, sınıfınızı test etmek istiyorsunuz.

Ancak pragmatik bir bakış açısıyla, 1 saniyeniz biraz uzun gözükse de, yaklaşımınız iyi.


1

Benzer bir şey yaptım, ama sadece aradım ping localhost. Yürütülebilir dosyaları derleme sunucunuza koyma zahmetinden kurtarır

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.