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

  • 相关阅读:
    SCILAB简介[z]
    UG OPEN API编程基础 2约定及编程初步
    Office 2003与Office 2010不能共存的解决方案
    UG OPEN API 编程基础 3用户界面接口
    NewtonRaphson method
    UG OPEN API编程基础 13MenuScript应用
    UG OPEN API编程基础 14API、UIStyler及MenuScript联合开发
    UG OPEN API编程基础 4部件文件的相关操作
    UG OPEN API编程基础 1概述
    16 UG Open的MFC应用
  • 原文地址:https://www.cnblogs.com/martinzhang98/p/10696694.html
Copyright © 2011-2022 走看看