下面的代码值得单元测试吗?

Cod*_*ake 1 delphi tdd unit-testing

我是单元测试的新手.我不知道是否值得对下面的代码进行单元测试.这是用Delphi编写的示例方法:

function TCoreAudio.CreateAudioClient: IAudioClient;
var
  MMDeviceEnumerator: IMMDeviceEnumerator;
  MMDevice: IMMDevice;
  MixFormat: PWaveFormatEx;
  AudioClient: IAudioClient;
  HR: HResult;
begin
  Result := nil;

  if CheckWin32Version(6, 0) then // The Core Audio APIs were introduced in Windows Vista.
  begin
    HR := GetInstance().CoCreateInstance(CLSID_MMDeviceEnumerator, nil, CLSCTX_ALL,
      IMMDeviceEnumerator, MMDeviceEnumerator);
    if Failed(HR) then
      Exit;
    HR := MMDeviceEnumerator.GetDefaultAudioEndpoint(eRender, eConsole, MMDevice);
    if Failed(HR) then
      Exit;
    HR := MMDevice.Activate(IAudioClient, CLSCTX_ALL, nil, AudioClient);
    if Failed(HR) then
      Exit;
    HR := AudioClient.GetMixFormat(MixFormat);
    if Failed(HR) then
      Exit;
    HR := AudioClient.Initialize(AUDCLNT_SHAREMODE_SHARED, 0, 0, 0, MixFormat, nil);
    CoTaskMemFree(MixFormat);
    if Failed(HR) then
      Exit;

    Result := AudioClient;
  end;
end;
Run Code Online (Sandbox Code Playgroud)

这种方法值得单元测试吗?如果是,它需要测试哪些部分?

谢谢.

Dav*_*nan 6

您面临的问题是如何测试它而不是它是否应该进行测试.

这是许多COM调用的包装,它可能由于许多不同的原因而失败.那些可能的COM故障条件是测试此例程的最重要方面.但是你不能轻易激起COM例程失败.为了测试这些COM故障模式,你需要使用一个模拟器,这是你从哪里来的一个很大的飞跃.

  • 我同意,因为在这种情况下(a)嘲讽努力很大,(b)功能的复杂性很低,我会说:不值得. (2认同)