2016-08-08 39 views
0

ich mit einfacher Multiplikation Anwendung versuchen,mit Mocking in Einheit Testfall Versuch

public virtual int Multi(int a, int b) 
{ 
    return a * b; 
} 

ich es versuche Moq mit zu verspotten. Aber in den

namespace UnitTestProject1 
{ 
    [TestClass] 
    public class UnitTest1 
    { 
     [TestMethod] 
     public void TestMethod1() 
     { 
      int a = 5; 
      int b = 10; 
      Mock<WebForm1> Titi = new Mock<WebForm1>(); 
      // WebForm1 obj = new WebForm1(); 
      //int Real= obj.Multi(a, b); 
      // Titi.Setup(x => x.data()).Returns(true); 
      Titi.CallBase = true; 
     var data= Titi.Setup(x => x.Multi(a, b)).Returns(50); 



      Assert.AreEqual(true, Titi.Object); 
      //Assert.AreEqual(50, Titi.Object); 




     } 
    } 
} 

Wo, wie in der Mocking Ausgabe erhalte ich

Assert.AreEqual failed. Expected:<True (System.Boolean)>. Actual:<Castle.Proxies.WebForm1Proxy (Castle.Proxies.WebForm1Proxy)> 

Es bedeutet die tatsächlichen & Erwartete passen nicht, aber warum ich diese Störung erhalten? wo es eine einfache Logik ist.

Antwort

1

Sie verwenden nicht die mock richtig

[TestMethod] 
public void TestMethod1() { 
    int a = 5; 
    int b = 10; 
    int expected = 50; 
    Mock<WebForm1> mockWebForm = new Mock<WebForm1>(); 
    mockWebForm.Setup(x => x.Multi(a, b)).Returns(expected); 

    var webForm = mockWebForm.Object; 

    var data = webForm.Multi(a, b); 

    Assert.AreEqual(50, data); 
} 

Normalerweise Mocks für Abhängigkeiten verwendet werden.

zum Beispiel sagen, Sie haben

public interface IMultiply { 
    int Multiply(int a, int b); 
} 

und Ihre Web-Formular ist abhängig von dieser Schnittstelle

public class WebForm1 { 
    IMultiply multiplier; 
    public WebForm1(IMultiply multiplier) { 
     this.multiplier = multiplier; 
    } 

    public virtual int Multi(int a, int b) { 
     return multiplier.Multiply(a, b); 
    } 
} 

dann ein Unit-Test wie dieser

aussehen kann
[TestMethod] 
public void TestMethod1() { 
    //Arrange 
    int a = 5; 
    int b = 10; 
    int expected = 50; 
    var mockMultiplier = new Mock<IMultiply>(); 
    mockMultiplier.Setup(x => x.Multiply(a, b)).Returns(expected); 

    //your web form is the system under test 
    var webForm = new WebForm1(mockMultiplier.Object); 

    //Act 
    var actual = webForm.Multi(a, b); 

    Assert.AreEqual(expected, actual); 
} 
+0

Dank Nkosi .. I hab das Konzept ... –

+0

@lokanathdas hast du das Problem gelöst? Wenn Sie das Problem gelöst haben, markieren Sie es als Antwort. – Nkosi