zoukankan      html  css  js  c++  java
  • 软件工程——第二次作业

    1. 开发工具的选择及安装

    由于我们尚未最终决定后续开发项目具体使用哪种程序设计语言,因此在此决定安装Microsoft Visual Studio 2017社区版和Eclipse IDE两种开发工具,分别用于C ++/C #和Java的开发。

    1.1 Visual Studio 2017

    Visual Studio是我最编写C,C ++,C #,Python最主要使用的开发工具,因此我的电脑上已经安装了这一开发工具。

    它在运行时的状态如图所示。

    avator

    1.2 Eclipse IDE

    Eclipse的安装较为复杂,主要分为以下几个步骤

    2. 自动单元测试

    由于上一步配置了两种开发环境,因此我们分别在这两种开发环境下进行C #和Java的单元测试。

    2.1 C #单元测试

    在Visual Studio 2017版本中,原先的VSTS工具已经不复存在。目前有三种测试方法可以使用。

    • Microsoft Azure DevOps 提供的测试工具
    • Visual Studio 2017 自带的测试工具MSTest
    • Visual Studio 2017 的NUnit测试插件

    我们在这里选择Visual Studio自带的测试工具MSTest进行测试。

    首先编写用于测试的类库User

    namespace UnitTest2
    {
        public class User
        {
            public User(string userEmail)
            {
                m_email = userEmail;
            }
            private string m_email; //user email as user id
        }
    }
    

    然后创建单元测试
    avator

    得到下面的自动生成但是还不能直接运行的测试类

    namespace UnitTest2.Tests
    {
        [TestClass()]
        public class UserTests
        {
            [TestMethod()]
            public void UserTest()
            {
                Assert.Fail();
            }
        }
    }
    

    修改后得到最终的测试类

    namespace UnitTest2.Tests
    {
        [TestClass()]
        public class UserTests
        {
            [TestMethod()]
            public void UserTest()
            {
                string userEmail = "martinzhang@outlook.com";
                User target = new User(userEmail);
                Assert.IsTrue(target != null);
            }
        }
    }
    

    运行测试后得到如图的结果
    avator

    添加更多的测试,将测试类更改为

    namespace UnitTest2.Tests
    {
        [TestClass()]
        public class UserTests
        {
            [TestMethod()]
            public void UserTest()
            {
                string userEmail = "someone@somewhere.com";
                User target = new User(userEmail);
                Assert.IsTrue(target != null);
            }
    
            [TestMethod()]
            [ExpectedException(typeof(ArgumentException))]
            public void UserTestEmpty()
            {
                User target = new User("");
            }
    
            [TestMethod()]
            [ExpectedException(typeof(ArgumentException))]
            public void UserTestBlank()
            {
                User target = new User("     ");
            }
        }
    }
    

    并将User类更改为

    namespace UnitTest2
    {
        public class User
        {
            public User(string userEmail)
            {
                m_email = userEmail;
                if (!m_email.Contains("@"))
                {
                    throw new ArgumentException();
                }
            }
            private string m_email; //user email as user id
        }
    }
    

    运行测试,可得到如图的测试结果
    avator

    然后我们尝试查看代码覆盖率结果,得到为空结果,如下图所示。
    avator
    这个结果明显是异常的,通过查阅Microsoft官方的Visual Studio文档,我们找到了这样的表述

    要求
    代码覆盖率功能仅在 Visual Studio Enterprise 版本中可用。

    可以看出只有企业版的Visual Studio才支持使用代码覆盖率这一功能,所以我们所使用的社区版得到了空的结果。

    2.2 Java单元测试

    在Eclipse IDE环境中,我们可以使用JUnit工具来进行单元测试。

    首先从JUnit的Github页面下载JUnit的jar文件,并将其导入到Eclipse IDE的环境中。

    然后编写用来测试的Java类

    public class Calculate 
    {
        public int add(int a, int b) {
            return a + b;
        }
    
        public int substract(int a, int b) {
            return a - b;
        }
    
        public int multiply(int a, int b) {
            return a * b;
        }
    
        public int divide(int a, int b) {
            // 这里只是最简单的测试demo,暂不做容错处理
            return a / b;
        }
    }
    

    2.2.1 手动编写测试类

    编写测试类

    import static org.junit.Assert.*;
    import org.junit.Test;
    import Coding.Calculate;
    
    public class CalculateTest {
    	@Test
    	public void add()
    	{
    		assertEquals(8, new Calculate().add(3, 5));
    	}
    }
    

    运行测试类,得到如下图的结果
    avator

    2.2.2 自动生成测试类

    在被测试类Calculate上单击右键,新建一个其他(Other…)项目
    avator
    搜索JUnit并新建一个JUnit Test Case
    avator
    将其存放在UnitTest/test目录下,并命名为CalculateAutoTest
    avator
    选择要测试的方法
    avator
    得到自动生成的测试方法
    avator
    此时自动生成的测试方法还未编写具体实现,因此无法直接运行,我们将其做如下修改

    import static org.junit.Assert.*;
    import org.junit.Test;
    
    public class CalculateAutoTest {
    
    	@Test
    	public void testAdd() {
    		assertEquals(8, new Calculate().add(3, 5));
    		//fail("Not yet implemented");
    	}
    
    	@Test
    	public void testSubstract() {
    		assertEquals(5, new Calculate().substract(6, 1));
    		//fail("Not yet implemented");
    	}
    
    	@Test
    	public void testMultiply() {
    		assertEquals(16, new Calculate().multiply(2, 8));
    		//fail("Not yet implemented");
    	}
    
    	@Test
    	public void testDivide() {
    		assertEquals(9, new Calculate().divide(63, 7));
    		//fail("Not yet implemented");
    	}
    
    }
    

    然后再次执行测试,得到如下图所示的结果
    avator

  • 相关阅读:
    NOI Online2021第一场游记
    图论笔记
    Happy New Year!
    CALL TRANSACTION 'CKM3' PARAMETER ID 失效
    将博客搬至CSDN
    CSS 合并同理
    js倒计时改进版
    获取Android版本
    使用二进制方式部署k8s高可用集群
    PPTP无法连接或能连接无法上网或上网慢的问题
  • 原文地址:https://www.cnblogs.com/martinzhang98/p/10696694.html
Copyright © 2011-2022 走看看