たとえそれが可能だったとしても、それはおそらく悪い考えです。単体テストは、テストではなく、CheckService
テストCheckService
のみを行う必要がありますGetboolean
。Getboolean
他の方法に依存しない個別の単体テストが必要です。
それを行う正しい方法はGetboolean
、インターフェースから継承する別のクラスにあなたを持ち、そのインターフェースをService
コンストラクターに渡し(おそらく依存性注入を使用して)、次にそのインターフェースをモックして、ユニットにモック実装を渡すことができますテスト。
例:
public interface ILogicChecker
{
bool Getboolean();
}
public class LogicChecker : ILogicChecker
{
public bool Getboolean()
{
//.....
if (someConditions)
return true;
else
return false;
}
}
public class Service
{
ILogicChecker logicChecker;
Status status;
public Service(ILogicChecker logicChecker)
{
this.logicChecker = logicChecker;
}
public void CheckService()
{
//...
if (logicChecker.Getboolean())
{
status = Status.Pass;
}
else
{
status = Status.NotPass;
}
}
}
public enum Status
{
Pass = 0,
NotPass = 1
}
次に、テスト クラスで (Moq 構文を使用します。申し訳ありませんが、FakeItEasy はわかりません):
[Test]
public void CheckService_WithTrueGetboolean_ShouldHave_PassStatus
{
//Arrange
var logicCheckerMock = new Mock<ILogicChecker>();
logicCheckerMock.Setup(x => x.Getboolean()).Returns(true);
var service = new Service(logicCheckerMock.Object);
//Act
service.CheckService();
//Assert
Assert.That(service.Status, Is.EqualTo(Status.Pass));
}
[Test]
public void CheckService_WithFalseGetboolean_ShouldHave_NotPassStatus
{
//Arrange
var logicCheckerMock = new Mock<ILogicChecker>();
logicCheckerMock.Setup(x => x.Getboolean()).Returns(false);
var service = new Service(logicCheckerMock.Object);
//Act
service.CheckService();
//Assert
Assert.That(service.Status, Is.EqualTo(Status.NotPass));
}