一种非常简单的方法,但不知道要测试什么!
我想在业务逻辑层中测试此方法,而_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();
}
如果你为这种方法编写测试,请告诉我你会测试什么?
非常感谢!
答案 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()
你的想法是什么?