반응형
Moq : 재정의 할 수없는 구성원에 대한 잘못된 설정 : x => x.GetByTitle ( "asdf")
이 문제를 어떻게 해결할 수 있는지 확실하지 않고 "GetByTitle"메서드에 대한 단위 테스트를 시도합니다.
내 정의는 다음과 같습니다.
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);
}
단위 테스트 :
[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);
}
테스트를 실행하면 오류가 발생합니다.
System.ArgumentException: Invalid setup on a non-overridable member:
x => x.GetByTitle("some title")
최신 정보
내 [Setup]
모습 :
[Setup]
public void SetUp()
{
_mockDaoFactory = new Mock<IDaoFactory>();
_mockArticleDao = new Mock<ArticleDao>();
_articleManager = new ArticleManager(_mockDaoFactory.Object);
}
모의 객체의 동작을 제어하려면 (최소한 Moq에서는) 인터페이스를 모의 처리하거나 제어하려는 동작이 가상으로 표시되어 있는지 확인해야합니다. 귀하의 의견에서 인스턴스화 _mockArticleDao
가 다음과 같이 수행 되도록 이해합니다 .
_mockArticleDao = new Mock<ArticleDAO>();
그대로 유지하려면 GetArticle
메소드 를 표시해야합니다 virtual
.
public class ArticleDAO : GenericNHibernateDAO(IArticle, int>, IArticleDAO
{
public virtual IArticle GetByTitle(string title)
{
// ...
}
}
그렇지 않으면 (그리고 이것이 내가 권장하는 것입니다) 대신 인터페이스를 조롱하십시오.
_mockArticleDao = new Mock<IArticleDAO>();
반응형
'programing tip' 카테고리의 다른 글
Python super ()는 TypeError를 발생시킵니다. (0) | 2020.08.08 |
---|---|
DOM ID에는 어떤 문자가 허용됩니까? (0) | 2020.08.08 |
Go 빌드 :“패키지를 찾을 수 없음”(GOPATH가 설정되어 있어도) (0) | 2020.08.08 |
추상 클래스의 모든 상속 된 클래스 가져 오기 (0) | 2020.08.07 |
psycopg2 커서에서 열 이름 목록을 얻으려면 어떻게해야합니까? (0) | 2020.08.07 |