C#-单元测试工厂设计模式

时间:2018-10-16 16:17:11

标签: c# unit-testing tdd

我正在做一个项目,我必须使用C#对单元工厂设计模式进行单元测试。 目前我陷入困境,我也不知道我也做了什么。有人可以帮我吗?我要对该代码进行单元测试:

public class CinemaFactory : AbstractFactory //inheritance of AbstractFactory
{
    public override Space createspace(AddItemsInProps item)
    {
        //returns new Cinema
        return new Cinema(item.AreaType, item.Position, item.Dimension); 
    }
}

我还做了一个单元测试项目,并创建了这个项目:

    [TestClass]
public class UnitTest1
{
    [TestMethod]
    public void TestMethod1()
    {
        //Arrange
        Game1.Design_Patterns.CinemaFactory cinemaFactory = new Game1.Design_Patterns.CinemaFactory();

        //Act

        //Assert

    }
}

电影院:

public class Cinema : Space //inheritance of Space class
{

    //Named arguments free you from the need to remember or to look up the order of parameters in the parameter lists of called methods. 
    public Cinema(string areaType, string position, string dimension) : base(areaType, position, dimension)
    {
        //The sprite  of the Cinema
        this.Img = "cinema";
    }
    public void StartMovie()
    {

    }
}

这是类AddItemsInProps:

public class AddItemsInProps
{
    //Get: The get { } implementation must include a return statement. It can access any member on the class.
    //Set: The set { } implementation receives the implicit argument "value." This is the value to which the property is assigned.

        public string Classification { get; set; }
        public string AreaType { get; set; }
        public string Position { get; set; }
        public string Dimension { get; set; }
        public int Capacity { get; set; }
        public int ID { get; set; }
    }
}

这是de class Space:

 public abstract class Space
{
    public string AreaType { get; set; }
    public Point Position { get; set; }
    public Point Dimension { get; set; }
    public int ID { get; set; }
    public string Img { get; set; }
    public int Afstand { get; set; }
    public Space Vorige { get; set; }
    public Dictionary<Space, int> Neighbours = new Dictionary<Space, int>();

这是类AbstractFactory:

    public abstract class AbstractFactory
{
    //Creating Object
    public abstract Space createspace(AddItemsInProps item);
}

2 个答案:

答案 0 :(得分:2)

创建被测对象的实例并提供必要的依存关系。

[TestClass]
public class CinemaFactorTests {
    [TestMethod]
    public void CinemaFactory_Should_Create_Cinema() {
        //Arrange
        var cinemaFactory = new Game1.Design_Patterns.CinemaFactory();

        var item = new AddItemsInProps {
            //set necessary properties here
            AreaType = "value here",
            Position = "value here",
            Dimension = "value here"
        };

        //Act
        var actual = cinemaFactory.createspace(item);

        //Assert
        Assert.IsNotNull(actual);
        Assert.IsInstanceOfType(actual, typeof(Cinema));
        //...you can also compare property values from item and actual for equality
        Assert.AreEqual(item.AreaType, actual.AreaType);
        //...
    }
}

调用被测方法,然后用实际行为验证预期行为

答案 1 :(得分:0)

您可以测试一些东西,例如工厂返回的对象的类型,以及该对象是否等效于预期的对象。

一个示例-测试等效性:

[TestClass]
public class CinemaFactoryTests
{
    [TestMethod]
    public void GivenItemProps_WhenCreatingSpace_ShouldReturnExpectedSpace()
    {
        // arrange
        var factory = new CinemaFactory();

        var props = new AddItemsInProps
        {
            AreaType = "my area",
            Position = "my position",
            Dimension = "my dimension"
        };

        // act
        Space cinema = factory.createspace(props);

        // assert
        var expectedCinema = new Cinema(props.AreaType, props.Position, props.Dimension);
        cinema.Should().BeEquivalentTo(expectedCinema);
    }
}

在这种情况下,我正在检查工厂返回的对象是否等于预期的对象。

PS:我正在使用FluentAssertions检查对象是否等效。