0

私は常に失敗している次のテストを持っています、そして私は理由を理解することができません:(

[TestClass]
public class UserTest
{
    private Mock<IRolodexDA> _rmock = new Mock<IRolodexDA>();
    private Mock<ICompanyDA> _cmock = new Mock<ICompanyDA>();
    private Mock<IUserSettingsDA> _umock = new Mock<IUserSettingsDA>();
    private Mock<ICLObjectContext> _clmock = new Mock<ICLObjectContext>();


    [TestInitialize]
    public void Setup()
    {
        ObjectFactory.Inject(typeof(IRolodexDA), _rmock.Object);
        ObjectFactory.Inject(typeof(ICompanyDA), _cmock.Object);
        ObjectFactory.Inject(typeof(IUserSettingsDA), _umock.Object);
        ObjectFactory.Inject(typeof(ICLObjectContext), _clmock.Object);
    }


[TestMethod]
public void Get_does_not_return_valid_user_when_not_enabled()
{

        string email_add = "theguy@totest.com";
        List<RolodexDomain> items = new List<RolodexDomain>();
        items.Add(new RolodexDomain() {rdx_contact_name = "joe blogs", rdx_auto_key = 1, email_address = email_add, cv_udf_030 = null , sdf_rdx_001 = null });


        _rmock.Setup(s => s.Get()).Returns(items.AsQueryable());

        var result2 = _rmock.Object.Get();

        var user = new CLAPortal.Service.UserService();
        var result = user.Get(email_add);

        Assert.IsNull(result);

}

私のサービスレイヤーには、次のコードがあります。

public class UserService : IUserService
{
    private readonly IRolodexDA _rolodexDA = Resolver.GetConcreteInstanceOf<IRolodexDA>();
    private readonly IUserSettingsDA _userSettingsDA = Resolver.GetConcreteInstanceOf<IUserSettingsDA>();
    private readonly ICompanyDA _companyDA = Resolver.GetConcreteInstanceOf<ICompanyDA>();
    private ICLObjectContext _context = Resolver.GetConcreteInstanceOf<ICLObjectContext>();

    public UserDomain Get(string email_address)
    {
        UserDomain user = null;
        var rdx = GetRolodexForUser(email_address);

        if (rdx != null)
        {
            user = new UserDomain()
            {
                email_address = rdx.email_address,
                name = rdx.rdx_contact_name,
                password = rdx.sdf_rdx_001,
                rdx_auto_key = rdx.rdx_auto_key,
                settings = _userSettingsDA.Get().Where(x => x.rdx_auto_key == rdx.rdx_auto_key).SingleOrDefault() ?? null
            };
        }
        return user;
    }

    private RolodexDomain GetRolodexForUser(string email_address)
    {
        var result = (_rolodexDA.Get().Where(u => u.email_address.ToUpper() == email_address.ToUpper() && u.cv_udf_030.ToUpper() == "T"));

        return result.SingleOrDefault() ?? null;
    }

問題は、サービスレイヤーでGetRolodexForUserを生成するための呼び出しにあります。値を調べようとすると、オブジェクトがオブジェクトのインスタンスに設定されていない状態になります。

理論的には空のコレクションを返す必要がありますか?

このクラスのテストのうち、リファクタリング後に失敗する唯一のテストですが、理由を理解できません:(

何か案は?ありがとう!

PSこれは、アプリを分解してテスト可能にする最初の試みです。そのため、モックや依存関係の注入に関して、理解できない根本的な問題が発生する可能性があります。

4

1 に答える 1

0

モックされた取得リストを作成するときに null の場合、修正により cv udf 030 の代わりに空の文字列が渡されました。エンティティフレームワークがnullを空の文字列に変換すると確信しています

于 2012-07-17T12:39:47.340 に答える