我是 TDD 和单元测试的新手,我有 JustMock 商业版,还有一周的时间来学习如何使用它。下面是一个接口,一个类和一个通过的测试方法。我必须添加 Class1 faceDoesSomething 才能编译它,我还想做一个安排并断言它确实将动作设置为“微笑”。有办法吗?
编辑:我正在使用一个不使用 JustMock 的示例来使用 JustMock 创建解决方案。我意识到该示例测试委托实际上订阅了该事件,因此我需要在担心它返回什么之前这样做。我通过添加测试方法 ClassRegistersAsListenerForDoesSomethingEvent 修改了下面的代码,使其更接近我正在使用的示例。我相信我错过了一个断言,但我不确定。我知道测试失败了,所以我做对了。
在这个过程中的某个时刻,我是否真的开始在真实类上使用测试,而不仅仅是在模拟上?
public delegate void IFace1EventDelegate(object sender, IFace1 face);
public interface IFace1
{
string Action { get; set; }
int DoesSomethingListenerCount { get; }
event IFace1EventDelegate DoesSomething;
}
public class Class1
{
public event IFace1EventDelegate DoesSomething;
IFace1 face;
private string action = string.Empty;
public Class1(IFace1 Face)
{
face = Face;
face.DoesSomething += new IFace1EventDelegate(faceDoesSomething);
}
public string Action
{
get { return action; }
set { action = value; }
}
public int DoesSomethingListenerCount
{
get
{
if (DoesSomething != null)
{
return DoesSomething.GetInvocationList().Count();
}
return 0;
}
}
private void faceDoesSomething(object sender, IFace1 face)
{
}
}
[TestMethod]
public void FaceShouldSmile()
{
// arrange
var Smiley = Mock.Create<IFace1>();
var Classy = Mock.Create<Class1>(Smiley);
Mock.Arrange(() => Classy.Action).Returns("Frown");
// act
string s = Classy.Action;
// assert
Assert.AreEqual("Frown", s);
}
[TestMethod]
public void ClassRegistersAsListenerForDoesSomethingEvent()
{
// arrange
var Smiley = Mock.Create<IFace1>();
var Classy = Mock.Create<Class1>(Smiley);
// act
int listenersCountAfter = 1;
int actualListenersCount = Classy.DoesSomethingListenerCount;
// assert
Assert.AreEqual(listenersCountAfter, actualListenersCount);
}