繁体   English   中英

单元测试-无法从存储库类访问方法

[英]Unit Testing - Can't Access Method From Repository Class

我正在编写一个Unit Test ,以验证是否使用正确的数据选择了特定产品。 当前,该测试提供了以下错误:

System.NullReferenceException:对象引用未设置为对象的实例。

在通过测试进行调试时,我注意到我的result变量为null ...我以为我正确地调用了SelectProduct方法,但不确定是什么错误。

附加问题 -关于如何更好断言的任何建议?

[TestClass]
    public class ProductRepositoryTests
    {
        [TestMethod]
        public void SelectProduct_selectProduct_productIsSelected()
        {        
            // access ProductRepository
            Mock<IProductRepository> mock = new Mock<IProductRepository>();

            // Arrange - mocked product
            Product product1 = new Product
            {
                ProductId = 1,
                ProductName = "Snicker Bar",
                ProductPrice = .25M,
                ProductCategory = "Candy",
                ProductQuantity = 12
            };

            // Act - select new product using SelectProduct method
            var result = mock.Object.SelectProduct(product1.ProductId);

            // Assert
            Assert.AreEqual(result.ProductId, 1);
            Assert.AreEqual(result.ProductName, "Snicker Bar");
            Assert.AreEqual(result.ProductPrice, .25M);
        }
    }

这是我的存储库层的其他代码:

接口:

public interface IProductRepository
{
    Product SelectProduct(int productId);
}

储存库类别:

 public class ProductRepository : IProductRepository
    {
        public Product SelectProduct(int productId)
        {
            throw new System.NotImplementedException();
        }
    }

您似乎要测试ProductRepository类,但要测试一个假对象。

测试结果如下所示:

// Arrange
var sut = new ProductRepository(); //sut means System Under Test
...

// Act - select new product using SelectProduct method
var result = sut.SelectProduct(product1.ProductId);

// Assert
....

伪造品(或Mocks)仅用于伪造被测类的依赖关系,而不能伪造类本身。 因此,在此特定测试中,您无需使用模拟框架。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM