문제

나는 단위 테스트에 Subsonic 3.0의 테스트 저장소 지원을 사용하려고 노력했지만 몇 가지 문제가 발생 했으므로 문서를 작성했으며 다음과 같은 수정 사항을 작성했다고 생각했습니다.

자동 증가 열은 작동하지 않습니다

분명히 DB가 없으면 자동 증가 열은 자동으로 작동하지 않지만 나와 같이 모든 ID 열에 간단한 INT 또는 Long을 사용하면이 수정이 잘 작동합니다.

(이것은 사본입니다 여기, 완전성 포함)

activerecord.tt :

1 : 함수 상단에서 public void add (idataprovider provider) {

        public void Add(IDataProvider provider){

<#if(tbl.PK.SysType=="long" || tbl.PK.SysType=="int") {#>
            if (TestMode)
            {
                this.<#=tbl.PK.CleanName#>=++next_test_autoid;
            }

<#}#>

2 : 라인 아래 공개 bool testmode = false, 추가 :

        public bool TestMode = false;
<#if(tbl.PK.SysType=="long" || tbl.PK.SysType=="int") {#>
        private static <#=tbl.PK.SysType#> next_test_autoid = 0;
<#}#>

물체 평등 비교가 깨졌습니다

기본 activeRecord 템플릿을 사용하면 객체 평등이 작동하지 않습니다. 따라서 DB에서 항목을 제거하는 것은 List <> 이후로 작동하지 않습니다. 테스트 개설에 사용 된 remove ()가 제거되는 항목과 일치하지 않습니다. 다음과 같은 TT 템플릿에서 고정 될 수 있습니다.

activerecord.tt :

    public override bool Equals(object obj){
        if(obj.GetType()==typeof(<#=tbl.ClassName#>)){
            <#=tbl.ClassName#> compare=(<#=tbl.ClassName#>)obj;
            return compare.KeyValue().Equals(this.KeyValue());
        }else{
            return base.Equals(obj);
        }
    }

Deletemany는 테스트 저장소에서 구현되지 않았습니다

이와 같은 작업 records.Delete(x => x.whatever == whatever) Deletemany가 구현되지 않기 때문에 테스트 리포에 대해 실패합니다. 이것을 수정하려면 소스를 얻고 직접 구축해야하지만 여기에는 작동하는 구현이 있습니다.

testrepository.cs :

    public int DeleteMany(Expression<Func<T, bool>> expression)
    {
        foreach (var x in _items.AsQueryable().Where(expression).ToList())
        {
            _items.Remove(x);
        }
        return 0;
    }
도움이 되었습니까?

해결책

감사합니다 - 그러나 가장 좋은 방법은 귀하의 문제에 대해 알려주는 것입니다 :). StackoverFlow는 질문에 대한 답변에 더 적합합니다. Github로 향하고 최신 소스를 확인하는 것이 좋습니다 (이들 중 다수를 고정했습니다). 몇 가지 문제를 해결할 수 있다면 패치는 매우 환영합니다.

다른 팁

포인트 2와 관련하여 KeyValue ()를 비교하기 때문에 레코드가 아직 저장되지 않은 경우 여전히 깨졌습니다. 절약되지 않은 기록이 진정한 평등을 갖도록하려면 레코드가 나오는지 여부를 테스트하고 그렇다면 다른 평등 전략을 결정해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top