namespace Obc.Sh
{
    /// <summary>
    /// クライアントバージョン
    /// </summary>
    public class MAProgramVersion
    {
        /// <summary>
        /// バージョン文字列(長形式)
        /// </summary>
        public static readonly string ProgramVersion = "1.02.0000.00000";
        public static void Main() { }
    }
}
namespace MAProgramVersionTestCase
{
    [TestFixture]
    public class MAProgramVersionTestCase
    {
        public MAProgramVersion terget;        [SetUp]
        public void SetUp()
        {
            terget = new MAProgramVersion();
        }        [TearDown]
        public void TearDown()
        {
            terget = null;
        }        [Test]
        public void TestProgramVersion()
        {
            Console.WriteLine("TestMAProgramVersion TestProgramVersion");
            Assert.AreEqual("1.02.0000.00000", terget);        }
    }
}用nunit执行后说红色部分出错,是不是因为terget没有取到主类的变量?

解决方案 »

  1.   

    这个单元测试要修改下的,terget是一个MAProgramVersion的实例,和那个字符串比较
    肯定不相等的
      

  2.   

    一个字符串怎么可能和你定义的类对象相等?
    Assert.AreEqual("1.02.0000.00000", terget.ProgramVersion);
      

  3.   

    现在是想取主类的变量,用terget.ProgramVersion出错了
      

  4.   

    MAProgramVersion.ProgramVersion没注意你那是个静态变量...不能用实例访问...
      

  5.   

    terget换成MAProgramVersion.ProgramVersion 
      

  6.   

    Assert.AreEqual("1.02.0000.00000", MAProgramVersion.ProgramVersion)
    用这个就行了;用terget.ProgramVersion时可能会提示空引用。这点我不确定。如果是按执行的顺序来看,是没问题的:
    1  public MAProgramVersion terget; 
    2  terget = new MAProgramVersion(); 
    3  terget.ProgramVersion;
    但是在编译的时候,可能会有问题;
      

  7.   

    “用terget.ProgramVersion时可能会提示空引用。这点我不确定。”楼上的这个我可以帮你解答,如果在.net下肯定不行,必须使用类来引用静态变量,在java下就行,可以用对象引用静态的变量