(jflood.net のコメントによると) 最終的にできることは、懸念事項を分離することです。したがって、現在、2 つの主な懸念事項があります (さらに細分化することもできますが、過度のエンジニアリングも避ける必要があります) - ユーザーへのデータの提示と、ユーザーの入力の検証。
ASP.NET WebForm コードは問題 #1 を処理します。検証の問題を分離するには、検証ロジックを処理する新しい検証クラスを作成する必要があります。何かのようなもの
public class Validator
{
public bool ValidateEmail(string email)
{
bool valid = false;
//Run RegEx validation and set the valid flag
return valid;
}
}
ページの読み込み時に、この新しいクラスを利用できます
protected void Page_Load(object sender, EventArgs e)
{
Validator validator = new Validator();
string email = Request.Form["EmailInput"];
bool isEmailValid = validator.ValidateEmail(email);
if (isEmailValid)
Response.Write("Email is valid");
}
これは宿題のための疑似コードであることに注意してください。完全な解決策を入力したくありませんでした。
これで、検証の問題を独自のクラスに分離できました。これにより、理解が容易になり、単体テストが容易になります。
ここで、Validator クラス (特にこの場合は ValidateEmail) の単体テストを作成する必要があります。
ここに例があります
[Test]
public void ValidateGoodEmail()
{
Validator validator = new Validator();
bool shouldBeTrue = validator.ValidateEmail("test@test.com");
Assert.AreEqual(true, shouldBeTrue);
}
[Test]
public void ValidateBadEmail()
{
Validator validator = new Validator();
bool shouldBeFalse = validator.ValidateEmail("test@.com");
Assert.AreEqual(false, shouldBeFalse);
}
単体テストでは、さまざまな論理フローをテストしているだけであることを忘れないでください。すべての入力をテストする必要はないので、ここでは、特定の不適切な電子メール アドレスを使用した偽の検証と、適切な電子メール アドレスを使用した真の検証の両方をテストしました。
お役に立てれば