为什么 TestMethod 可以访问内部属性?

Why does a TestMethod has access to internal properties?

我是测试新手,我 运行 进入了一个特定场景,在该场景中,测试项目的测试方法可以访问内部 属性。这是否按设计工作,或者有人可以向我解释为什么这样工作吗?

来自测试的片段 Class:

/// <summary>This class contains parameterized unit tests for NWatchSystemConfiguration</summary>
    [PexClass(typeof(NWatchSystemConfiguration))]
    [PexAllowedExceptionFromTypeUnderTest(typeof(InvalidOperationException))]
    [PexAllowedExceptionFromTypeUnderTest(typeof(ArgumentException), AcceptExceptionSubtypes = true)]
    [TestClass]
    public partial class NWatchSystemConfigurationTest
    {
        [TestMethod]
        public void CreateEncryptedPropertyTest()
        {
            const string propertyName = "createdEncryptedProperty";
            const string propertyValue = "testValue";

            const string expected = propertyValue;

            target.CreateProperty(propertyName, propertyValue, true); 

            var actual = target.AppSettings.Settings[propertyName].Value;  // AppSettings is an internal property

            Assert.IsNotNull(actual);
            Assert.AreEqual(expected, actual);
        }
    }

正在测试 class 的代码段:

public class NWatchSystemConfiguration : NWatchConfigurationBase
    {
        internal AppSettingsSection AppSettings;

        // Output emitted for brevity
    }

如果您没有在 AssembnlyInfo.cs 中使用 InternalsVisibleTo attribute,您将无法访问它。 看看你的 assemblyinfo.cs。我想你会在那里找到类似 [assembly: InternalsVisibleTo("TestAssemblyName")] 的东西。