SORU
25 Aralık 2009, Cuma


Adedi: non-geçersiz kılınabilir üye Geçersiz kurulum: x => x.GetByTitle("asdf")

Bu yöntemi bir birim test yapmaya düzeltebilirim bilmiyorum nasıl"" . GetByTitle

İşte benim tanımlar:

public class ArticleDAO :  GenericNHibernateDAO(IArticle, int>, IArticleDAO
{
    public IArticle GetByTitle(string title)
    {
        IQuery query = Session.CreateQuery("...")
        return query.UniqueResult<IArticle>();
    }
}

public interface IArticleDAO
{
    IArticle GetByTitle(string title);
}

birim testi:

[Test]
public void can_load_by_title()
{
    _mockDaoFactory.Setup(x => x.GetArticleDao())
                                .Returns(_mockArticleDao.Object);
    _mockArticleDao.Setup(x => x.GetByTitle("some title"))
                                .Returns(article1.Object);

    _articleManager.LoadArticle("some title");

    Assert.IsNotNull(_articleManager.Article);
}

Testi bana hata veriyor:

System.ArgumentException: Invalid setup on a non-overridable member:
x => x.GetByTitle("some title")

Güncelleme

[Setup] benim gibi:

[Setup]
public void SetUp()
{
     _mockDaoFactory = new Mock<IDaoFactory>();
     _mockArticleDao = new Mock<ArticleDao>();

     _articleManager = new ArticleManager(_mockDaoFactory.Object);    
}

CEVAP
25 Aralık 2009, Cuma


Sipariş için kontrol davranışı bir mock nesne (Adedi en az), ya da ihtiyaç için sahte bir arayüz, ya da olduğundan emin olun davranışı yapmaya çalıştığını kontrol işaretli sanal. Yorumlarınız, _mockArticleDao başlatmasını böyle bir şey yapılır ki anlıyorum:

_mockArticleDao = new Mock<ArticleDAO>();

Eğer böyle devam etmek istiyorsan, GetArticle yöntemi virtual işaretlemeniz gerekir:

public class ArticleDAO :  GenericNHibernateDAO(IArticle, int>, IArticleDAO
{
    public virtual IArticle GetByTitle(string title)
    {
        // ...
    }
}

Aksi takdirde (ve bu tavsiye ederim), arayüzü yerine alay ediyor.

_mockArticleDao = new Mock<IArticleDAO>();

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Dylan Dubay

    Dylan Dubay

    10 Temmuz 2013
  • NewsyTech

    NewsyTech

    2 AĞUSTOS 2010
  • UrAvgConsumer

    UrAvgConsume

    1 Ocak 2012