Soru MvcIntegrationTestFramework veya ASP.NET MVC 3 için güncellenen bir alternatif


Steve Sanderson’ı kullanmak istiyorum. MvcIntegrationTestFramework  ya da çok benzer bir alternatif ASP.NET MVC 3 Beta ile.

Şu anda derlerken MvcIntegrationTestFramework MVC 3 Beta karşı MVC değişiklikleri nedeniyle aşağıdaki hatayı alıyorum:

Error 6 'System.Web.Mvc.ActionDescriptor.GetFilters()' is obsolete: '"Please call System.Web.Mvc.FilterProviders.Providers.GetFilters() now."'  \MvcIntegrationTestFramework\Interception\InterceptionFilterActionDescriptor.cs Line 18

Sorular

1. ASP.NET MVC 3 Beta için çalışan MvcIntegrationTestFramework'ı herkes sağlayabilir mi?

--- ve / veya ---

2. Önerebileceğiniz benzer alternatifler var mı?


DÜZENLEME # 1: Not MvcIntegrationTestFramework'ın yaratıcısı Steve'i e-posta ile gönderdim ve bazı geri bildirimler almayı umuyordum.

DÜZENLE # 2 ve # 3: Steve'den bir mesaj aldım. Referans için belirtilen:
Bu projeyi MVC 3 ile kullanmaya gerek yok, çok üzgünüm, güncellenmiş bir versiyonum yok. Bildiğim kadarıyla, MVC 3 üzerinde çalışmak için onu güncellemek mümkün olmalıdır, ancak belki de eylemler, filtreler, vb nasıl çağrılır herhangi bir değişiklik fark etmek için MVC 3 kaynak kodu inceleyerek bunu anlamak gerekir şimdi. Güncellemeyi yaparsanız ve devam eden bir proje olarak benimsemeye karar verirseniz (örneğin, Github'a veya benzerine koyarak), bana bildirin ve bir bağlantı göndereceğim! (Teşekkürler Steve!)

4. DÜZENLE: Dürüstçe kullanarak hızlı bir bıçak vardı System.Web.Mvc.FilterProviders.Providers.GetFilters() hızlı bir yere gelmedim ve basitçe [Obsolete] MVC taleplerinin içeriğinde bir hata olduğunu tespit etti. Başka kimseyi salladı mı?

DÜZENLEME # 5: MVC 3 ile alternatif Entegrasyon Test Çerçevesi kullanıyorsanız lütfen yorum yapın.


18
2017-11-25 15:52


Menşei


Beni bu çerçeveye tanıtmak için +1. Güzel. - TheCloudlessSky
Aynı çözünürlüğü arıyorum. Çerçeve çok değerli. - Amir


Cevaplar:


Çayama bir bak:

https://github.com/JonCanning/MvcIntegrationTestFramework/


9
2018-03-16 09:43



Cevabınız için teşekkürler - pek çok insanın yararlı bulduğu kadar doğru işaretleme. Ancak sonuçta alternatif test metodolojilerine baktım. - Dean Taylor


Bunun sizin aradığınız cevap olmadığını biliyorum, ancak Selenium veya Watin, Entegrasyon Test Çerçevesine bir alternatif olarak sizin için kullanılabilir.

Selenium, testlerinizi nUnit kodu olarak kaydetmenize izin verir, böylece mevcut test projelerinizle entegre edebilirsiniz. Sonra testiniz DOM'yi Entegrasyon Test Çerçevesine benzer şekilde doğrulayabilir. Avantajı Selenium testleri çeşitli farklı tarayıcılarla gerçekleştirilebilir.

Anahtar uyarısı, Selenium'un bir web sunucusuna dağıtılmak üzere uygulamanıza ihtiyaç duymasıdır. Bu sizin için bir gösteri durdurucusunun olup olmadığından emin değildir.


4
2017-12-16 18:53



Cevabınız için çok geçerli ve doğru teşekkürler. Evet, Selenium'u tanıyın ve bir test paketi ayarına sahip olun, ancak bu mükemmel bir uyum değildir. Tarayıcıya bağımlı olmadan MvcIntergrationTestFramework'a benzer bir kodda "belirli bir düzeyde" test yapmayı tercih ederim. Teşekkürler. - Dean Taylor


Deneyimlerimi kullanarak paylaşacağımı düşündüm. MvcIntegrationTestFramework ASP.NET MVC 4 projesinde. Özellikle, ASP.NET MVC 4 projesi bir Bir Windows Azure Bulut Hizmeti için Web Rolü.

Jon Canning'in çatalı örnek projesinin benim için çalışmasına rağmen (System.Web.Mvc derlemesini 3.0.0.0'dan 4.0.0.0'a değiştirdim, ancak web.config dosyasında bir dizi düzenleme gerektiriyordu. ve geçiş), bir Azure ASP.NET MVC 4 Web Rolü projesine karşı aynı testleri çalıştırmayı denediğimde bir hata aldım. Hata şuydu:

System.Reflection.TargetInvocationException: İstisnanın hedefi tarafından istisna atıldı.

İç istisna şu oldu:

System.InvalidOperationException: Bu yöntem, uygulamanın başlangıç ​​öncesi başlatma aşamasında çağrılmaz.

ASP.NET MVC 4 tabanlı bir Azure Web Rolü projesinin normal bir ASP.NET MVC 4 projesine göre nasıl farklı olduğunu ve böyle bir değişikliğin bu hataya nasıl yol açacağını merak etmeye başladım. İnternette biraz arama yaptım, ancak yaptığım şeyi yapmaya çalışan hiç kimseye rastlamadım. Çok geçmeden bunun bununla ilgili olduğunun farkına varmayı başardım. Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener. Bu sınıfın rolünün bir parçası, web rolünün Barındırılan bir hizmette veya Geliştirme Kumaşında çalışıyor (bulut hizmeti projesinden başlatma projesini bir bulut hizmeti çözümünün içindeki web rol projesine geçirirseniz ve ardından hata ayıklamaya çalışırsanız) bu etkiyle ilgili bir ileti görürsünüz.

çözüm? Web Role projemin Web.config dosyasından ilgili dinleyiciyi kaldırdım:

<configuration>
... 
  <system.diagnostics>
    <trace>
      <listeners>
        <!--Remove this next 'add' element-->
        <add type="Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener, Microsoft.WindowsAzure.Diagnostics, Version=1.8.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
      name="AzureDiagnostics"> <filter type="" /> </add> 
      </listeners>
    </trace>
  </system.diagnostics>
...
</configuration>

Daha sonra Web Rol projem için normal olarak entegrasyon testlerini çalıştırabiliyordum. Ancak, dinleyiciyi Web.Debug.config ve Web.Release.config dönüştürme dosyalarına ekledim, böylece her şey normal dağıtma ve hata ayıklama için hala aynıydı.

Belki de bu, Azure geliştirme için MvcIntegrationTestFramework'ı kullanmak isteyen birine yardımcı olabilir.

DÜZENLE Azure bileşenleriyle (örneğin, belki de özel Azure önbelleğe alma mekanizmaları) ilgili uygulama kodu üzerinde entegrasyon testi yapmanıza izin vermeyebileceğinden, bu çözümün bir "kesmek" olabileceğini fark ettim. Bununla birlikte, henüz bununla ilgili herhangi bir konuya rastlamadım, yine de pek çok entegrasyon testini henüz yazmamış olmama rağmen ...


1
2017-12-15 05:11





Jon Canning'in güncellenmiş versiyonunu kullandım (https://github.com/JonCanning/MvcIntegrationTestFramework/) ve sadece değer tiplerini ve dizeleri kabul eden, ancak kabul edilen sınıflar için çalışmayan denetleyici yöntemleri için problemimi çok iyi çözdü.

Güncellenen kodla ilgili bir sorun çıktı. MvcIntegrationTestFramework.

Nasıl düzeltileceğini anladım, ancak çözümü nereye göndereceğimi bilmiyorum, işte burada:

Nasıl çalıştığını göstermek için basit bir örnek:

    [TestMethod]
    public void Account_LogOn_Post_Succeeds()
    {
        string loginUrl = "/Account/LogOn";
        appHost.Start(browsingSession =>
        {
            var formData = new RouteValueDictionary
            {
                { "UserName", "myusername" },
                { "Password", "mypassword" },
                { "RememberMe", "true"},
                { "returnUrl", "/myreturnurl"},
            };

            RequestResult loginResult = browsingSession.Post(loginUrl, formData);

            // Add your test assertions here.
        });
    }

Çağrı browsingSession.Post sonuçta neden olur NameValueCollectionConversions.ConvertFromRouteValueDictionary(object anonymous) çağrılacak yöntem ve bunun için kod:

public static class NameValueCollectionConversions
{
    public static NameValueCollection ConvertFromObject(object anonymous)
    {
        var nvc = new NameValueCollection();
        var dict = new RouteValueDictionary(anonymous); // ** Problem 1

        foreach (var kvp in dict)
        {
            if (kvp.Value == null)
            {
                throw new NullReferenceException(kvp.Key);
            }
            if (kvp.Value.GetType().Name.Contains("Anonymous"))
            {
                var prefix = kvp.Key + ".";
                foreach (var innerkvp in new RouteValueDictionary(kvp.Value))
                {
                    nvc.Add(prefix + innerkvp.Key, innerkvp.Value.ToString());
                }
            }
            else
            {
                nvc.Add(kvp.Key, kvp.Value.ToString()); // ** Problem2
            }
        }
        return nvc;
    }

Sonra iki sorun vardı:

  1. Çağrı new RouteValueDictionary(anonymous) "yeni" ye sebep olur RouteValueDictionary yaratılmak üzere, ancak 4 tuş yerine, bunlardan sadece bir tanesi vardır, bunlardan biri 4 maddelik bir dizi idi.
  2. Bu çizgiye çarptığında: nvc.Add(kvp.Key, kvp.Value.ToString(), kvp.Value bir dizidir ve ToString () şunları verir: "System.Collections.Generic.Dictionary'2+ValueCollection[System.String,System.Object]"

Düzeltme (özel sorunuma göre) kodu aşağıdaki gibi değiştirmek oldu:

        var dict = anonymous as RouteValueDictionary; // creates it properly
        if (null == dict)
        {
            dict = new RouteValueDictionary(anonymous);             
        }

Bu değişikliği yaptıktan sonra, model sınıfım düzgün bir şekilde bağlanırdı ve her şey iyi olurdu.


0
2018-06-09 04:03