单元测试 - 简单的方法,但不知道要测试什么!

时间:2010-04-06 04:17:01

标签: unit-testing rhino-mocks

一种非常简单的方法,但不知道要测试什么!

我想在业务逻辑层中测试此方法,而_dataAccess显然来自数据层。

public DataSet GetLinksByAnalysisId(int analysisId)
{
        DataSet result = new DataSet();
        result = _dataAccess.SelectAnalysisLinksOverviewByAnalysisId(analysisId);
        return result;
}

所有我测试的确是测试_dataAccess.SelectAnalysisLinksOverviewByAnalysisId()被调用!

这是我的测试代码(使用Rhino mock)

[TestMethod]
public void Test()
{
   var _dataAccess = MockRepository.GenerateMock<IDataAccess>();

   _dataAccess.Expect(x => x.SelectAnalysisLinksOverviewByAnalysisId(0));

   var analysisBusinessLogic = new AnalysisLinksBusinessLogic(_dataAccess);
   analysisBusinessLogic.GetLinksByAnalysisId(0);

   _dataAccess.VerifyAllExpectations();

}

如果你为这种方法编写测试,请告诉我你会测试什么?

非常感谢!

2 个答案:

答案 0 :(得分:2)

您提出的示例测试不会测试相关方法,而是测试具有相同名称的重载。

另一个问题是为模拟设置的期望与调用的方法不匹配。再次,这是另一个重载。

我想到的第三件事是你不需要在这里执行基于交互的测试。由于测试中的方法具有返回值,因此您可以执行简单的基于状态的测试

这是一种可能的选择:

[TestMethod]
public void Test()
{
   var id = 1;
   var expectedResult = new DataSet();

   var dataAccess = MockRepository.GenerateStub<IDataAccess>();

   dataAccess.Stub(x => x.SelectAnalysisLinksOverviewByAnalysisId(1))
       .Return(expectedResult);

   var analysisBusinessLogic = new AnalysisLinksBusinessLogic(dataAccess);
   var result = analysisBusinessLogic.GetLinksByAnalysisId(id);

   Assert.AreEqual(expectedResult, result);

}

答案 1 :(得分:0)

实际上你认为这个小调整?

dataAccess.Expect(x =>
x.SelectAnalysisLinksOverviewByAnalysisId(1)).Return(expectedResult);


 Assert.AreEqual(expectedResult, result);
 dataAccess.VerifyAllExpectations();

这样我们做Assert以及期望调用SelectAnalysisLinksOverviewByAnalysisId()

你的想法是什么?