枚举器“更新”类不包含定义,但仅适用于单元测试方法,而不是在 DAL 项目中使用时

Posted

技术标签:

【中文标题】枚举器“更新”类不包含定义,但仅适用于单元测试方法,而不是在 DAL 项目中使用时【英文标题】:Enumerator 'Update' class does not contain a definition, but only for the Unit Testing method and not when it use inside the DAL project 【发布时间】:2017-02-26 06:56:26 【问题描述】:

我正在尝试为我的 DAL 层/项目中的 DAO (EmployeeDAO.cs) 中的更新方法运行单元测试。在 EmployeeDAO.cs 类中,我的 Update 方法

public UpdateStatus Update(Employee emp)
    
        UpdateStatus status = UpdateStatus.Failed;
        HelpdeskRepository repo = new HelpdeskRepository(new DbContext());
        try
        
            DbContext ctx = new DbContext();
            var builder = Builders<Employee>.Filter;
            var filter = Builders<Employee>.Filter.Eq("Id", emp.Id) & Builders<Employee>.Filter.Eq("Version", emp.Version);
            var update = Builders<Employee>.Update
                .Set("DepartmentId", emp.DepartmentId)
                .Set("Email", emp.Email)
                .Set("Firstname", emp.Firstname)
                .Set("Lastname", emp.Lastname)
                .Set("Phoneno", emp.Phoneno)
                .Set("Title", emp.Title)
                .Inc("Version", 1);

            var result = ctx.Employees.UpdateOne(filter, update);
            status = repo.Update(emp.Id.ToString(), filter, update);

            //ask how to get status to work in MatchedCount/Modified count so we don't need DbContext use
            if (result.MatchedCount == 0) //if zero version didn't match
            
                status = UpdateStatus.Stale;
            
            else if (result.ModifiedCount == 1)
            
                status = UpdateStatus.Ok;
            
            else
            
                status = UpdateStatus.Failed;
            
        
        catch (Exception ex)
        
            DALUtils.ErrorRoutine(ex, "EmployeeDAO", "UpdateWithRepo");

        
        return status;
    

似乎工作正常,编译器没有检测到错误。但是,当我尝试在同一解决方案中的 EmployeeDAOTests.cs/UnitTestProject 内的这种方法中对其进行一些单元测试时,

[TestMethod]
    public void TestUpdateShouldReturnOK()
    
        EmployeeDAO dao = new EmployeeDAO();
        Employee emp = dao.GetById(eid);
        emp.Phoneno = "(555)555-9999";
        Assert.IsTrue(dao.Update(emp) == UpdateStatus.OK);
    

它告诉我

(CS0117)"'UpdateStatus' 不包含 'OK' 的定义"

,在这里可以看出很明显有一个 OK 的定义,似乎可以在我的实际 DAO 中使用:

public enum UpdateStatus



    Ok = 1,
    Failed = -1,
    Stale = -2
;

另一方面,当我按照定义 Ok、Failed 和 Stale 的顺序进行交易时,它会停止导致单元测试错误,但会开始导致 DAO 错误!

很困惑,有人有意见吗?

【问题讨论】:

你的情况是错误的'Ok' @VisakhVA 嗯......这很尴尬。介意把它变成一个答案,这样我就可以相信你了吗? 【参考方案1】:

这是一个小错误 :) UpdateStatus.OK 应该是 UpdateStatus.Ok :)

【讨论】:

以上是关于枚举器“更新”类不包含定义,但仅适用于单元测试方法,而不是在 DAL 项目中使用时的主要内容,如果未能解决你的问题,请参考以下文章

MySQL:错误 1217 (23000):无法删除或更新父行:外键约束失败 - 但仅适用于 1 个 sql 文件

Android单元测试:如何模拟包含MutableLiveData但仅公开LiveData的对象?

Python:如何在单元(鼻子)测试期间忽略装饰器?

业力单元测试/存储 - 状态未定义

在 Restcontroller 的单元测试期间,我的 Mocking 类不起作用

我已经将tkinter窗口划分为单元格(使用框架)。如何定义适用于每个单元格的方法?